BeanUtils&&DbUtils

BeanUtils

程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件。

BeanUtils的作用是简化对javaBean的操作。

可以从www.apache.org下载BeanUtils组件,然后再在项目中引入jar文件!需要引入的jar文件有:

1、引入commons-beanutils-1.8.3.jar核心包
2、引入日志支持包: commons-logging-1.1.3.jar

基本用法

1、对属性的拷贝

BeanUtils.copyProperty(admin, "userName", "jack");
BeanUtils.setProperty(admin, "age", 18);

2、对象的拷贝

BeanUtils.copyProperties(newAdmin, admin);

3、map数据拷贝到javaBean中,map中的key必须要和javaBean的属性名一致。

BeanUtils.populate(adminMap, map);

4、BeanUtils对javabean中的基本数据类型是不需要做特殊处理的,但是对日期就必须转化处理了,其中有两种处理方式

(1)自定义转化器

 1 //2. 自定义日期类型转换器
 2     @Test
 3     public void test2() throws Exception {
 4         // 模拟表单数据
 5         String name = "jack";
 6         String age = "20";
 7         String birth = "   ";
 8         
 9         // 对象
10         Admin admin = new Admin();
11         
12         // 注册日期类型转换器:1, 自定义的方式
13         ConvertUtils.register(new Converter() {
14             // 转换的内部实现方法,需要重写
15             @Override
16             public Object convert(Class type, Object value) {
17                 
18                 // 判断
19                 if (type != Date.class) {
20                     return null;
21                 }
22                 if (value == null || "".equals(value.toString().trim())) {
23                     return null;
24                 }
25                 
26                 
27                 try {
28                     // 字符串转换为日期
29                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
30                     return sdf.parse(value.toString());
31                 } catch (ParseException e) {
32                     throw new RuntimeException(e);
33                 }
34             }
35         },Date.class);
36         
37         
38         
39         // 把表单提交的数据,封装到对象中
40         BeanUtils.copyProperty(admin, "userName", name);
41         BeanUtils.copyProperty(admin, "age", age);
42         BeanUtils.copyProperty(admin, "birth", birth);
43         
44         //------ 测试------
45         System.out.println(admin);
46     }

(2)使用BeanUtils自己的日期转化器

 1 //2. 使用提供的日期类型转换器工具类
 2     @Test
 3     public void test3() throws Exception {
 4         // 模拟表单数据
 5         String name = "userName";
 6         String age = "20";
 7         String birth = null;
 8         
 9         // 对象
10         Admin admin = new Admin();
11         
12         // 注册日期类型转换器:2, 使用组件提供的转换器工具类
13         ConvertUtils.register(new DateLocaleConverter(), Date.class);
14                 
15         // 把表单提交的数据,封装到对象中
16         BeanUtils.copyProperty(admin, "userName", name);
17         BeanUtils.copyProperty(admin, "age", age);
18         BeanUtils.copyProperty(admin, "birth", birth);
19         
20         //------ 测试------
21         System.out.println(admin);
22     }
23 }

DbUtils组件

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

Dbutils组件需要引入的jar文件:commons-dbutils-1.6.jar

常用API

|-- DbUtils   关闭资源、加载驱动
|-- QueryRunner   组件的核心工具类:定义了所有的与数据库操作的方法(查询、更新)
  Int  update(Connection conn, String sql, Object param);   执行更新带一个占位符的sql
  Int  update(Connection conn, String sql, Object…  param); 执行更新带多个占位符的sql
  Int[]  batch(Connection conn, String sql, Object[][] params)        批处理
  T  query(Connection conn ,String sql, ResultSetHandler<T> rsh, Object... params)   查询方法


  Int  update( String sql, Object param);  
  Int  update( String sql, Object…  param);
  Int[]  batch( String sql, Object[][] params)       
注意: 如果调用DbUtils组件的操作数据库方法,没有传入连接对象,那么在实例化QueryRunner对象的时候需要传入数据源对象: QueryRunner qr = new QueryRunner(ds);

DbUtils提供的封装结果的一些对象:
  1)BeanHandler: 查询返回单个对象
  2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
  3)  ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
  4)  ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
  5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
  6)  MapHandler  查询返回结果的第一条记录封装为map

使用示例:

1、查询

 1 public class App_query {
 2 
 3     private Connection conn;
 4 
 5     // 一、查询, 自定义结果集封装数据
 6     @Test
 7     public void testQuery() throws Exception {
 8         String sql = "select * from admin where id=?";
 9         // 获取连接
10         conn = JdbcUtil.getConnection();
11         // 创建DbUtils核心工具类对象
12         QueryRunner qr = new QueryRunner();
13         // 查询
14         Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {
15 
16             // 如何封装一个Admin对象
17             public Admin handle(ResultSet rs) throws SQLException {
18                 if (rs.next()) {
19                     Admin admin = new Admin();
20                     admin.setId(rs.getInt("id"));
21                     admin.setUserName(rs.getString("userName"));
22                     admin.setPwd(rs.getString("pwd"));
23                     return admin;
24                 }
25                 return null;
26             }
27 
28         }, 29);
29 
30         // 测试
31         System.out.println(admin);
32         // 关闭
33         conn.close();
34 
35     }
36     
37     // 二、查询, 使用组件提供的结果集对象封装数据
38     
39     // 1)BeanHandler: 查询返回单个对象
40     @Test
41     public void testQueryOne() throws Exception {
42         String sql = "select * from admin where id=?";
43         // 获取连接
44         conn = JdbcUtil.getConnection();
45         // 创建DbUtils核心工具类对象
46         QueryRunner qr = new QueryRunner();
47         // 查询返回单个对象
48         Admin admin =  qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
49         
50         System.out.println(admin);
51         conn.close();
52     }
53     
54     // 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
55     @Test
56     public void testQueryMany() throws Exception {
57         String sql = "select * from admin";
58         conn = JdbcUtil.getConnection();
59         QueryRunner qr = new QueryRunner();
60         // 查询全部数据
61         List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
62         
63         System.out.println(list);
64         conn.close();
65     }
66     @Test
67 //    3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
68 //    4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
69 //    5) ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
70 //    6) MapHandler  查询返回结果的第一条记录封装为map
71     public void testArray() throws Exception {
72         String sql = "select * from admin";
73         conn = JdbcUtil.getConnection();
74         QueryRunner qr = new QueryRunner();
75         // 查询
76         //Object[] obj = qr.query(conn, sql, new ArrayHandler());
77         //List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
78         //Long num = qr.query(conn, sql, new ScalarHandler<Long>());
79         Map<String, Object> map = qr.query(conn,sql, new MapHandler());
80         
81         conn.close();
82     }
83 }
View Code

2、更新

 1 import java.sql.Connection;
 2 
 3 import org.apache.commons.dbutils.DbUtils;
 4 import org.apache.commons.dbutils.QueryRunner;
 5 import org.junit.Test;
 6 
 7 import cn.itcast.utils.JdbcUtil;
 8 
 9 public class App_update {
10 
11     private Connection conn;
12 
13     // 1. 更新
14     @Test
15     public void testUpdate() throws Exception {
16         String sql = "delete from admin where id=?";
17         // 连接对象
18         conn = JdbcUtil.getConnection();
19 
20         // 创建DbUtils核心工具类对象
21         QueryRunner qr = new QueryRunner();
22         qr.update(conn, sql, 26);
23 
24         // 关闭
25         DbUtils.close(conn);
26     }
27 
28     // 2. 批处理
29     @Test
30     public void testBatch() throws Exception {
31         String sql = "insert into admin (userName, pwd) values(?,?)";
32         conn = JdbcUtil.getConnection();
33         QueryRunner qr = new QueryRunner();
34         // 批量删除
35         qr.batch(conn, sql, new Object[][]{ {"jack1","888"},{"jack2","999"}  });
36         
37         // 关闭
38         conn.close();
39     }
40 }
View Code
原文地址:https://www.cnblogs.com/nicker/p/6820475.html