1. 程式人生 > >BeanUtils&&DbUtils

BeanUtils&&DbUtils

日期類型轉換 dmi 對象數組 return 指定 調用 params 基本用法 更新

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