博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb编程(七)数据库优化工具
阅读量:4959 次
发布时间:2019-06-12

本文共 2769 字,大约阅读时间需要 9 分钟。

---------------Commons-DBUtils数据库开源框架-----------------------------------------------------------------------------------------------------------------------

1、Apache组织提供的一个开源 JDBC工具类库,对JDBC操作进行了简单的封装。
并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
解决了两个问题:
a).自动创建和释放连接资源,不再有泄漏问题。
b).自动将Result转换成对象。填入不同的ResultSetHandler,可将ResultSet转换成不同的对象。使得代码更加简洁和健壮,让你将精力更多地投入到业务处理中。

 

2、重点类:

org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
org.apache.commons.dbutils.DbUtils

3、QueryRunner类:
//简单查询使用带一个参数的构造方法QueryRunner qr = new QueryRunner(ds);
//复杂查询使用两个参数的构造方法QueryRunner qr = new QueryRunner(ds,true);
构造方法:
new QueryRunner()
new QueryRunner(DataSource ds)
new QueryRunner(ds,true)

常用方法:

public transient int update(String sql, Object params[]) throws SQLException
根据参数执行一个更新(插入、更新或删除)操作,返回值为影响的行数。
   public int update(String sql) throws SQLException
用来执行一个不需要参数的更新(插入、更新或删除)操作,返回值为影响的行数。

public Object query(String sql, ResultSetHandler rsh) throws SQLException:
根据传入的SQL语句仅得到一条结果
   public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭,Connection不关闭。
   public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 
几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源中获得连接,内部自动关闭连接.
   public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :
执行一个不需要置换参数的查询操作。

4、ResultSetHandler实现类:

ScalarHandler:用户插入数据时,返回插入数据的标识字段的值。
Object id = qr.insert(sql, new ScalarHandler(),"lzj","123");

BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

new BeanHandler<User>(User.class)

BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

new BeanListHandler<User>(User.class)

MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。

Map<String, Object> map=(Map<String, Object>)qr.query(sql, new MapHandler());

MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

每个map的键都是结果集的第一行

List<Map<String, Object>> listMaps= qr.query(sql, new MapListHandler());

ColumnListHandler:将结果集中某一列的数据存放到List中。

List<String> list = (List) qr.query(sql, new ColumnListHandler("userId"));

KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

Map<Integer,Map> map = (Map) qr.query(sql, new KeyedHandler("userId"));

返回值:内部的map仍旧与列名字有关

ArrayHandler:把结果集中的第一行数据转成对象数组。

Object result[] = (Object[]) qr.query(sql, new ArrayHandler());

ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

List<Object[]> list = (List) qr.query(sql, new ArrayListHandler());
5.事务

注意:

使用QueryRunner对象的query方法包装为对象,必须具备如下条件,方可包装成功:
1.实体类User和数据库user表是通过UserVo.class来映射绑定的,实体类名可以和数据库表名不一致;
2.实体类User中的属性要和user表中的字段名和字段类型必须要一致;
3.实体类User必须生成标准的set/get方法。

转载于:https://www.cnblogs.com/dgq-blog/p/6517787.html

你可能感兴趣的文章
linu学习第二天:文件系统相关操作
查看>>
执行了的程序,才是你的程序.
查看>>
国内使用Google Maps JavaScript API
查看>>
Linux学习笔记之RedHat Enterprise Linux 6.4 使用 Centos 6 的yum源问题
查看>>
手机之间的“间谍战”-巧用“蓝牙间谍”遥控远程手机
查看>>
PowerDesigner(数据库迁移)
查看>>
SQL查看表结构以及表说明
查看>>
js隐藏显示div
查看>>
message sent to deallocated instance
查看>>
Python基础
查看>>
在AxureRP8中实现广告文字滚动效果
查看>>
Add Microsoft SQL JDBC driver to Maven(转)
查看>>
javaScript 事件流---冒泡 && 捕获
查看>>
原型和继承 constructor、prototype、__proto__
查看>>
html5 返回当前地理位置的坐标点(经纬度)
查看>>
DelayedQueue
查看>>
正则表达
查看>>
面向对象与领域建模
查看>>
jQuery获取CSS样式中的颜色值的问题
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>