DBUtils

一、概念

DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。简要来说就是配合数据库连接池简化对数据库的操作代码,数据库连接池简化了连接操作,而DBUtils简化了增删改查操作,底层由DbUtils工具实现,我们只需要关注用法和了解实现逻辑即可。

二、常用实现类

ArrayHandler:查询到的单个数据封装成一个数组

ArrayListHandler:查询到的多个数据封装成多个集合,集合里的元素是数组

(最常用)BeanHandler:查询到的单个数据封装成一个对象

(最常用)BeanListHandler:查询到的多个数据封装成一个List<对象>

MapHandler:查询到的单个数据封装成一个map

MapListHandler:查询到的多个数据封装一个集合,集合里面的元素是map

三、基本用法

queryRunner.update(sql):针对增加、删除、修改

queryRunner.query(sql,rsh):针对查询

步骤:

1、导DBUtilsjar包,mysql驱动,c3p0包。从网上下载即可。

2、配置c3p0的配置文件(如果不了解c3p0的同学建议先了解c3p0,因为c3p0和DBUtils需一起使用)

3、基本操作演示

①增删改方法演示:

增添:

删除:

修改:

②查询方法演示:

--针对单条或多条数据的老版用法--(适合了解实现原理,不建议使用,被下面两个方法所替代):

DBUtils_第1张图片

--查询单条数据即返回单个对象--(现在常用)

BeanHadnler类实现了ResultSetHandler接口,帮我们实现了handle方法对数据的封装,简单来说就是根据类的字节码文件生成对象,然后帮我们把数据库查询出的数据封装成对象然后返回给我们。

--查询多条数据即返回一个List<对象>--(现在常用)

实现原理与上面一致,只是调用方法不同返回值类型不同。

四、注意事项(为博主自己测试结果,如有不对,欢迎大家请评论区指正共同进步)

1、使用BeanHadnler类和BeanListHandler类有一点需要注意,这两个类帮我们实现了对查询数据的封装,但是封装是根据类中的set方法将数据库返回数据封装的,假设你数据库表中有四个属性:id,name,age,sex,但是你的接收对象只有name和age两个成员变量,它在类中只匹配到了name和age的set方法,就只会将这两个成员变量赋值封装,所以不要求接收对象的成员变量和数据库的属性个数完全一致。

2、因为是根据对象中set方法匹配赋值,所以set方法名是有格式要求的,如果set方法名不对,封装时就会找不到对象中成员变量对应的set方法,则程序默认此对象中没有此成员变量。假设数据库中有一个属性名为sname,对象中需要接收此属性,则set方法格式为:set+sname(sname可以五个字符可以任意大小写),BeanHadnler类和BeanListHandler类的实现并不是匹配类中成员变量名,而是匹配对象中成员变量对应的set方法名进行赋值封装

举例演示:

----数据库student表列名:

----Student类,为了演示方便我只接收一个sname属性

----测试代码:

①Student类中成员变量名与数据库一致为sname,且set方法名为setSname

输出结果:

②Student类中成员变量名不与数据库一致,为name,但set方法名依旧为setSname

测试代码上同,输出结果:

③Student类中成员变量名与数据库一致为sname,但set方法名为setsname

DBUtils_第2张图片

输出结果:

④Student类中成员变量名不与数据库一致,为name,但set方法名为setSNaMe

输出结果:

⑤Student类中成员变量名与数据库一致为sname,但set方法名为setname

输出结果:

结论:根据①②可以排除封装是通过匹配成员变量名的可能,根据③④⑤可以得出结论set+数据库属性名(不论大小写),则可以匹配成功,若set+名字与数据库属性名不一致,则匹配失败。

①BeanHadnler类和BeanListHandler类的实现并不根据类中成员变量名进行匹配赋值封装。

②BeanHadnler类和BeanListHandler类的实现是根据set+数据库返回值列名(大小写不论)方法进行匹配封装。

你可能感兴趣的:(JavaWeb,MySQL)