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