小汤学编程之JDBC(二)——dbutils框架和DataSource连接池

本文介绍了dbutils框架,包括其作为JDBC的封装,提供了ResultSetHandler接口的各种实现,方便进行数据库的增删改查操作。同时,文章详细讲解了如何处理Bean属性与数据表列名的映射问题。此外,还讨论了DataSource连接池的使用,包括如何获取DataSource对象以及如何利用DataSource获取Connection进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

一、dbutils框架
1.介绍     2.新增/删除/修改     3.各种查询     4.扩展:Bean中属性名与数据表列名的映射
二、DataSource连接池
1.获取DataSource对象     2.使用DataSource对象

一、dbutils框架

1.介绍

dbutils是Apache开发的一个封装了JDBC的框架。是一种用于执行SQL语句的JAVA API,可以为多种关系数据库提供统一访问。
下载地址

dbutil框架的 ResultSetHandler 接口有许多实现类,每种实现类表示将结果封装成不同的对象,用于各种查询。

2.新增/删除/修改
// 加载驱动
Class.forName(DRIVER);
// 创建连接
Connection conn = DriverManager.getConnection(URL, USER, PWD);
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
// 定义SQL
String sql = "insert into  student(stu_name,stu_pwd) values(?,?)" ;
// 执行SQL,获取结果
int i = qr.update(conn, sql,"张三","123");

上面为新增,删除和修改与之类似,只是sql语句不同。

3.各种查询
方法功能
BeanListHandler将查询结果的每一行封装到Bean对象,然后再存入List集合
BeanHandler将查询结果的第一行数据,封装到Bean对象
MapListHandler将查询结果的每一行封装到map集合(key=列名,value=列值),再将map集合存入List集合
MapHandler将查询结果的第一行数据封装到map结合(key=列名,value=列值)
ColumnListHandler将查询结果的指定列的数据封装到List集合中
ArrayListHandler将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
ArrayHandler将查询结果的第一行数据,保存到Object数组中
ScalarHandler封装结果为单行单列的结果,类似count、avg、max、min、sum…函数
4.扩展:Bean中属性名与数据表列名的映射

在上述封装中需要Bean中的属性必须跟数据库中的字段名一样才可以映射上。但是数据库字段一般带下划线,如stu_name,而java中属性一般使用小驼峰命名,如stuName,两者不一致。则需要在定义Handler的时候传入一个BasicRowProcessor对象。DButils已经默认创建了GenerousBeanProcessor可以直接下划线字段到小驼峰的转换:

String sql = "select * from student";
BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
List<Student> list = runner.query(conn,sql, new BeanListHandler<Student>(Student.class,brp));

如果数据库字段跟bean中的属性命名不仅仅是下划线的区别的话,则需要使用其它的Processor:

// 要先把数据库字段跟属性字段全部映射关系存入到Map,在定义到BeanProcessor中
Map<String,String> map = new HashMap<>(); 
map.put("stu_id","stuId");
map.put("stu number","stuNumber");//数据库中字段是空格,属性是小驼峰
map.put("stu_name","stuName");
map.put("stu_age","stuAge");
map.put("stu_sex","stuSex");
map.put("stu_brithday","stuBrithday");		

BasicRowProcessor brp = new BasicRowProcessor(new BeanProcessor(map));
List<Student1> list = runner.query(conn,sql, new BeanListHandler<Student>(Student.class,brp));


二、DataSource连接池

1.获取DataSource对象

(1)方式一

//直接使用set方法:
DruidDataSource ds = new DruidDataSource();
ds.setUrl(URL);
ds.setUsername(USER);
ds.setPassword(PWD);
ds.setDriverClassName(DRIVER);

(2)方式二

//使用map创建:
Map<String,String> map = new HashMap<String,String>();
map.put("driverClassName", DRIVER);
map.put("url", URL);
map.put("username", USER);
map.put("password", PWD);

DataSource ds = DruidDataSourceFactory.createDataSource(map);

(3)方式三
通过properties创建:

// properties内容:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
// java代码:
Properties p = new Properties();
InputStream is = new FileInputStream(new File("src/datasource.properties"));
p.load(is);
DataSource ds = DruidDataSourceFactory.createDataSource(p);
2.使用DataSource对象

(1)方式一

QueryRunner qr = new QueryRunner(ds);
String sql = " select * from student " ;
List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class));

(2)方式二
如果不需要DataSource对象,而需要原始的Connection对象的话也可以通过DataSource的getConnection()方法获取连接对象:

QueryRunner qr = new QueryRunner();
String sql = " select * from student ";
List<Student> list = qr.query(ds.getConnection(),sql, new BeanListHandler<Student>(Student.class));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值