Apache Commons DbUtils

dbutils jar下载地址http://labs.renren.com/apache-mirror//commons/dbutils/binaries/commons-dbutils-1.4-bin.zip

配置获取一个数据库连接(添加数据库驱动)
		String url = "xxx";
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
Connection con = DriverManager.getConnection(url, "user","password");

将查询结果转换成对应的bean
		BeanHandler<Score> bh = new BeanHandler<Score>(Score.class);
QueryRunner run = new QueryRunner();
try {
Score score =run.query(con, "select ss.* from score_score ss where ss.id=?",bh,299);
//上面使用的query方法最后一个参数是可变参数,是sql中需要传递填充的值
System.out.println(score.getScore());
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
DbUtils.close(con);
} catch (SQLException e) {
e.printStackTrace();
}
}


将查询结果转换成对应的bean list
		BeanListHandler<Score> blh = new BeanListHandler<Score>(Score.class);
QueryRunner run = new QueryRunner();
try {
List<Score> list =run.query(con, "select * from score_score",blh);
for(Score s:list){
System.out.println(s.getScore());
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
DbUtils.close(con);
} catch (SQLException e) {
e.printStackTrace();
}
}

上面的bean和bean list转换不需要显示的调用PreparedStatement和ResultSet。直接通过QueryRunner工具类。

-------------个----------------
将ResultSet转换成bean
		PreparedStatement pstat = null;
ResultSet rs = null;
String sql = "select ss.* from score_score ss where ss.id=299";
try {
pstat =con.prepareStatement(sql);
rs = pstat.executeQuery();
while(rs.next()){
RowProcessor rp = new BasicRowProcessor();
Score score = rp.toBean(rs, Score.class);
System.out.println(score.getScore());
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbUtils.closeQuietly(con, pstat, rs);
}

将ResultSet转换成bean list
		PreparedStatement pstat = null;
ResultSet rs = null;
String sql = "select * from score_score";
try {
pstat =con.prepareStatement(sql);
rs = pstat.executeQuery();
while(rs.next()){
RowProcessor rp = new BasicRowProcessor();
List<Score> list= rp.toBeanList(rs,Score.class);
for(Score s:list){
System.out.println(s.getScore());
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbUtils.closeQuietly(con, pstat, rs);
}



* 类调用转换过程
* QueryRunner类的run方法
* 通过PreparedStatement获取ResultSet,然后对获取的ResultSet进行转换
* BeanHandler,BeanListHandler的默认RowProcessor都是
* ArrayHandler.ROW_PROCESSOR=BasicRowProcessor
* 而BasicRowProcessor的默认covert是BeanProcessor
* 所以最终转换都是调用的BeanProcessor中的toBean方法和toBeanList方法
*
* 所以要想控制转换 可以自定义BeanProcessor
* BeanProcessor转换过程:
* A.首先从传递过来的bean的class文件中提取所有的属性
* 即PropertyDescriptor[] props;
* PropertyDescriptor 对应存储属性名和属性类型
* B.检查ResultSet中的row colums和PropertyDescriptor[]的对应关系;哪个属性对应哪个字段
* 默认的匹配规则就是列名和属性名相等(忽略大小写)
* 对应方法:mapColumnsToProperties(ResultSetMetaData rsmd, PropertyDescriptor[] props)
* 可以从写该方法指定特定的属性和特定的列对应
* C.class,属性,对应字段值都有就可以创建对象赋值了
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改查了。代码看着也很简洁。 例如: 增删改查使用的类:QueryRunner类+ResultSetHandler类,使用这俩类就可以解决掉。 QueryRunner类的query()方法:new QueryRunner().query(Connection conn, String sql, ResultSetHandler rsh) query方法后面参数中加一个Connection连接,是在获取不到数据源的情况下,也就是说,QueryRunner的实例化构造函数使用无参的那个,下面我的实现代码就是用的这种方法。 当然还有一种实例化:new QueryRunner(new Datasource()).query(String sql, ResultSetHandler rsh) query方法中的参数 ResultSetHandler 参数中加上ResultSetHandler接口的实现类参数(下面这些实现类),执行完SQL后,返回的数据就是已经封装好的我们想要的结果了。 ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成Bean对象 BeanListHandler :将ResultSet中所有的数据转化成List ColumnListHandler :将ResultSet中某一列的数据存成List KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map,Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map MapListHandler :将ResultSet中所有的数据存成List<Map> ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值