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();}}}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米的算法部署岗对新手是真的友好

大家好啊&#xff0c;我是董董灿。 自从开始写一些AI行业的岗位介绍&#xff0c;就养成了一个习惯&#xff0c;在上下班的路上经常就会打开某聘瞧一瞧。 导致之前一年不看的某聘认为我要看机会换工作&#xff0c;疯狂给我推猎头&#xff0c;然后电话就进来了。 不堪骚扰的我…

EG20网口远程下载程序使用案例

EG20网口远程下载程序使用案例 前言&#xff1a;本文档主要说明了使用蓝蜂虚拟网络工具通过EG20网关的网口&#xff08;LAN口&#xff09;远程给PLC下载程序的步骤及其注意事项。使用蓝蜂虚拟网络工具&#xff0c;不仅支持程序的远程下载&#xff0c;同样支持程序的远程上传与…

11-30 SpringBoot

内嵌的tomcat tomcat的依赖 对于tomcat其实还是一个jar包 spring是一个IOC容器 tomcat的核心对象交给Spring容器 调用核心对象方法 启动Tomcat 1.添加依赖 tomcat-embed-core&#xff0c;叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中的 排除tomcat&a…

python爬取robomaster论坛数据,作为后端数据

一. 内容简介 python爬取robomaster论坛数据&#xff0c;作为后端数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 三.主要流程 3.1 接口分析 # 接口分析 # 全部数据 # https://bbs.robomaster.com/forum.php?modforumdisplay&fid63 2…

一个软件测试练手项目——学生信息管理系统测试,卷起来啊

免费分享一个练手项目&#xff0c;学生信息管理系统&#xff0c;获取方式在文末 1.引言 1.1项目目的 软件测试是为了在软件投入生产性运行之前&#xff0c;尽可能多地发现软件的错误。该项目的目的是给学习软件测试的朋友练手用 1.2 项目背景 随着学校的规模不断扩大&…

处理机调度与作业调度

处理机调度 一个批处理型作业&#xff0c;从进入系统并驻留在外存的后备队列上开始&#xff0c;直至作业运行完毕&#xff0c;可能要经历如下的三级调度 高级调度 也称为作业调度、长程调度、接纳调度。调度对象是作业 主要功能&#xff1a; 挑选若干作业进入内存 为作业创建…

linux NAT网卡配置static

由于是内网&#xff0c;资料无法拷贝&#xff0c;借助参考资料&#xff0c;整理发出。 镜像安装 基本操作。 查看VM配置 图1&#xff0c;有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255&#xff0c;对应下面配置的N…

git基本命令

git init 初始化代仓库&#xff0c;本地没有git需要git init执行一下才能上传 创建文件 touch gitOrder.txt git status 查看修改或者添加文件的状态 &#xff0c;红色表示添加到分支 git add git add 文件&#xff1a;添加单个文件 git add . 添加所有修改或者添加的所有…

算法通关村第六关—序列恢复二叉树(青铜)

根据序列恢复二叉树 示例 给定序列恢复二叉树(1)前序&#xff1a;1 2 3 4 5 6 8 7 9 10 11 12 13 15 14(2)中序&#xff1a;3 4 8 6 7 5 2 1 10 9 11 15 13 14 123)后序&#xff1a;8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 一、前中序列恢复二叉树 (1)前序&#xff1a;1 2 3…

C51--DHT11温湿度传感器

DHT11温湿度传感器 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 特点&#xff1a; 相对温度和湿度测量全部校准&#xff0c;数字输出长期稳定性超长的信号输出距离&#xff1a;20米超低耗能&#xff1a;休眠4引脚安装&#xff1a;可以买封装好的…

技巧-GPU显存和利用率如何提高和batch_size/num_works等参数的实验测试

目录 简介实验测试显存占用问题GPU占用率波动问题num_work不是越大越好 总结 本专栏为深度学习的一些技巧,方法和实验测试,偏向于实际应用,后续不断更新,感兴趣童鞋可关,方便后续推送 简介 在PyTorch中使用多个GPU进行模型训练时&#xff0c;各个参数和指标之间存在一定的关系…

Rust UI开发(5):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第五篇&#xff0c;前四篇链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建UI时…