BeanUtils&&DbUtils

Posted Dev_Nick

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 





















以上是关于BeanUtils&&DbUtils的主要内容,如果未能解决你的问题,请参考以下文章

02-JavaWeb开发Tomcat服务器&Servlet接口&HTTP协议&HttpServletRequest&BeanUtils工具包封装请求数据&Ht(

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式反射操作构造方法成员方法成员属性JavaBean的概述&BeanUtils的使用自定义BeanUtils工

使用 BeanUtils.copyProperties 时如何保持数值为 null?

javaweb实训第四天上午——员工管理系统-JavaBean&EL&JSTL&MVC思想

别再写满屏的 get & set 了,太 Low!试试 MapStruct 高级玩法!

自学过程