43.0BaseDao抽取dao公共父类

43.1. 回顾

1. 把数据库表中查询的结果封装到一个实体类中。

命名规则:类名和表名一致 类中属性和表的字段对应。

表中的一条记录对应实体的一个对象  多条记录→集合

43.2. 正文

目录

43.1. 回顾

43.2. 正文

43.3. 抽取dao公共父类。

43.4. 引入数据源


43.3. 抽取dao公共父类。

通过昨天我们的操作,可以发现dao类中很多方法都有一些相同的内容。那么我们就可以把这些相同的代码抽取到一个公共父类中。只需要这些dao子类继承该父类,子类就无需再写这些公共代码。

 

public class BaseDao {
    //1.相同属性抽取过来
    protected Connection conn=null;
    protected PreparedStatement ps=null;
    protected ResultSet rs=null;
    private String url="jdbc:mysql://localhost:3306/myinfo";
    private String user="root";
    private String password="root";
    private static String driverName="com.mysql.cj.jdbc.Driver";
    //加载驱动放入静态代码块中--随着类的加载而被加载而且只会加载一次。 静态方法或静态代码只能调用静态成员
    static{
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //2.获取连接对象
    public void getConnection() throws SQLException {
        conn = DriverManager.getConnection(url, user, password);
    }


    //3.关闭资源
    public void closeAll(){
        //关闭连接数据库的资源
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

}

抽象一个公共的增删改方法,

//4. 公共的增删改操作 参数类型不同:Object  参数个数不确定 ...
    public int update(String sql,Object... params){
        try {
            //2. 获取连接数据库的对象
            getConnection();
            //3. 获取执行sql语句的对象 ?表示占位符
            ps = conn.prepareStatement(sql);
            //4. 为占位符赋值
            for(int i=0;i<params.length;i++) {
                ps.setObject(i+1, params[i]);
            }
            //5. 执行sql语句 把sql执行的结果封装到ResultSet中
            int row = ps.executeUpdate();
            return row;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            closeAll();
        }
        return 0;
    }

 

43.4. 引入数据源

数据源就是用来存放连接数据库的对象。也叫数据库连接池。 :

C3P0、DBCP 、BoneCP、Proxool、

DDConnectionBroker、DBPool、

XAPool、Primrose、SmartPool、

MiniConnectionPoolManager

Druid等。

 (1)引入jar包

(2)修改basedao代码

 上面选择的内容,我们发现写死再代码中,如果未来交付时,需要改为对应客户的信息。需要修改源码--一旦代码写完不允许修改源码。--我们可以把上面这些信息写在属性文件中。 XXX.properties

db.properties

 

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myinfo
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

注意:名称必须为上面的名称→→ 值可以是你自己

 修改baseDao代码

public class BaseDao {
    //1.相同属性抽取过来
    protected Connection conn=null;
    protected PreparedStatement ps=null;
    protected ResultSet rs=null;
    //硬编码
    private static DataSource dataSource=null;
    //加载驱动放入静态代码块中--随着类的加载而被加载而且只会加载一次。 静态方法或静态代码只能调用静态成员
    static{
        try {
            //创建一个属性类
            Properties prop=new Properties();
            //加载属性文件
            prop.load(BaseDao.class.getClassLoader().getResourceAsStream("db.properties"));
            dataSource= DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //2.获取连接对象
    public void getConnection() throws SQLException {

        conn = dataSource.getConnection();
    }

    //4. 公共的增删改操作 参数类型不同:Object  参数个数不确定 ...
    public int update(String sql,Object... params){
        try {
            //2. 获取连接数据库的对象
            getConnection();
            //3. 获取执行sql语句的对象 ?表示占位符
            ps = conn.prepareStatement(sql);
            //4. 为占位符赋值
            for(int i=0;i<params.length;i++) {
                ps.setObject(i+1, params[i]);
            }
            //5. 执行sql语句 把sql执行的结果封装到ResultSet中
            int row = ps.executeUpdate();
            return row;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            closeAll();
        }
        return 0;
    }

    //3.关闭资源
    public void closeAll(){
        //关闭连接数据库的资源
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205734.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件夹重命名技巧:用关键词替换文件夹名称指定内容的右侧文字

在日常生活中&#xff0c;经常要管理大量的文件夹&#xff0c;这时候掌握一些文件夹重命名的技巧就非常实用。例如文件夹重命名时&#xff0c;经常要将一些通用的文字替换成其他关键词&#xff0c;以便更好地标识和分类文件夹。而用关键词替换文件夹名称指定内容的右侧文字&…

【论文阅读】1 SkyChain:一个深度强化学习的动态区块链分片系统

SkyChain 一、文献简介二、引言及重要信息2.1 研究背景2.2 研究目的和意义2.3 文献的创新点 三、研究内容3.1模型3.2自适应分类账协议3.2.1状态块创建3.2.2合并过程3.2.3拆分过程 3.3评价框架3.3.1性能3.3.1.1共识延迟3.3.1.2重新分片延迟3.3.1.3处理事务数3.3.1.4 约束 3.3.2 …

使用RobotFramework编写BDD代码

背景 行为驱动开发&#xff08;Behavior Driven Development&#xff09;即BDD&#xff0c;是一种敏捷开发方法&#xff0c;通常应用在自动化测试中&#xff0c;或者也可称为行为驱动测试。通过使用自然描述语言确定自动化脚本&#xff0c;通过这种方式&#xff0c;能够大大促…

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-BiLSTM-Multihead-…

Openai通用特定领域的智能语音小助手

无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来。她只能咧嘴无奈的摇摇头。水都还没有喝一口就开始“人工智能”的去回复。原本很阳光心情开始蒙上一层薄薄阴影。在这无休无止的Q&A中&#xff0c;就算你对工作有磐石一般强硬&#xff0…

XXL-Job详解(一):组件架构

目录 XXL-Job特性系统组成架构图调度模块剖析任务 “运行模式” 剖析执行器 XXL-Job XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 特性 1、简单&#…

探究Kafka原理-6.CAP理论实践

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

解决keil右键Go To Definition跳转不过去的问题

解决&#xff1a; 在魔法棒中如图所示打上√

Pycharm新手开发指南

文章目录 前言一、常用功能介绍二、常用高效pycharm使用方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言…

京东秒杀之秒杀实现

1 登录判断 用户在未登录状态下可以查看商品列别以及秒杀商品详情&#xff0c;但不可以在未登录状态进行秒杀商品的操作&#xff0c;当用户点击开始秒杀时&#xff0c;进行登陆验证 <!DOCTYPE html> <head><title>商品详情</title><meta http-eq…

习题补充整理

目录 一、自己封装response 二、在响应头中放数据 HttpResponse redirect ​编辑 render JsonResponse 三、函数和方法区别 ----》绑定方法区别 四、上传图片和开启media访问 五、页面静态化(解决访问率高的问题) 一、自己封装response 第一步&#xff0c;在app01下…

使用vue脚手架创建vue项目

Vue是一个流行的前端框架&#xff0c;可以用简洁的语法和组件化的思想开发单页面应用。Vue脚手架是一个官方提供的命令行工具&#xff0c;它可以帮你快速搭建和配置vue项目的基本结构和依赖。 本文介绍如何使用vue脚手架创建一个vue2项目&#xff0c;并选择一些常用的功能和插件…

【JavaFX漏扫开发基础】JavaFx项目基础

文章目录 前言一、创建项目二、运行程序三、application的启动方式和生命周期四、生命周期前言 创建第一个javafx项目,用Idea编辑器来创建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、创建项目 初创项目,第一个javafx的窗口。 依次点击,新建项目 点击Jaca…

字节的“游戏心脏”,真的停止跳动了吗?

字节跳动在游戏行业的宏大叙事&#xff0c;终究变成了一场游戏一场梦。 近日&#xff0c;朝夕光年首次公开回应此前的裁员传闻&#xff0c;明确表示会有业务方向和组织调整&#xff0c;游戏业务将迎来大规模收缩&#xff0c;未来会更加聚焦部分创新型游戏及相关技术的探索。 …

spring RedisTemplate RedisLockRegistry opsForXxx 基本使用总结以及介绍

一、基本介绍 RedisTemplate 为 spring 对 redis 操作的高度封装&#xff0c;基本已经满足所有使用场景。 若存在其他拓展使用我们可以自行封装工具类对基本操作进行组装。 RedisLockRegistry 对 redis 锁的一些封装 二、不同环境下依赖以及基本配置 2.1 spring-boot 下依赖…

MySQL之 InnoDB逻辑存储结构

InnoDB逻辑存储结构 InnoDB将所有数据都存放在表空间中&#xff0c;表空间又由段&#xff08;segment&#xff09;、区&#xff08;extent&#xff09;、页&#xff08;page&#xff09;组成。InnoDB存储引擎的逻辑存储结构大致如下图。下面我们就一个个来看看。 页&#xff08…

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…

【漏洞复现】熊海cms 存在sql注入 附poc

漏洞描述 熊海CMS 是由熊海开发的一款可广泛应用于个人博客,个人网站,企业网站的一套网站综合管理系统。 其采用前后端整合设计思路,php,Apache,mysql,前端使用Bootstrap和少许jquery前端框架开发; 网站样式设计简洁大方,整体功能点并不多,但功能正好够用;拥有一个…

【计网 面向连接的传输TCP】 中科大笔记 (十 二)

目录 0 引言1 TCP 的特性1.1 拓展&#xff1a;全双工、单工、半双工通信 2 TCP报文段结构3 TCP如何实现RDT4 TCP 流量控制4.1 题外话&#xff1a;算法感悟 5 TCP连接3次握手、断开连接4次握手5.1 连接5.2 断开连接 6 拥塞控制6.1 拥塞控制原理6.2 TCP拥塞控制 &#x1f64b;‍♂…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…