舉例1:使用BeanUtils工具封裝用戶提交的數據。
1 public static void main(String[] args)throws Exception { 2 3 // 模擬用戶的輸入的數據如下 4 5 String name = "XML基礎"; 6 7 String author = "焦寧波"; 8 9 String price = "99.99"; 10 11 String date = "2013-01-04"; 12 13 Book book = new Book(); 14 15 // 任務是將以上的屬性設置給指定的Book對象 16 17 BeanUtils.setProperty(book, "name", name); 18 19 BeanUtils.setProperty(book, "author", author); 20 21 BeanUtils.setProperty(book, "price",price ); 22 23 // 查看屬性是否封裝好 24 25 System.out.println(book); 26 27 }
發現使用上面的代碼可以省略基本數據類型的轉型的問題。進而提高代碼的開發效率。
舉例2:自定義一個類型轉換器類。
1 public static void main(String[] args)throws Exception { 2 3 // 模擬用戶的輸入的數據如下 4 5 String name = "XML基礎"; 6 7 String author = "焦寧波"; 8 9 String price = "99.99"; 10 11 String date = "2013-01-04"; 12 13 14 15 Book book = new Book(); 16 17 18 19 // 注冊一個自己的轉換器 20 21 /** 22 23 * converter指定具體的轉換器 24 25 * clazz遇到什么類型調用上面的轉換器 26 27 */ 28 29 ConvertUtils.register( 30 31 new Converter(){ 32 33 // 回調方法 34 35 @Override 36 37 public Object convert(Class type, Object value) { 38 39 if(value == null){ 40 41 return null; 42 43 } 44 45 // 轉換為String 46 47 String data = (String)value; 48 49 // 將指定格式的字符串轉換為Date 50 51 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 52 53 Date date = null; 54 55 try { 56 57 date = format.parse(data); 58 59 return date; 60 61 } catch (ParseException e) { 62 63 e.printStackTrace(); 64 65 return null; 66 67 } 68 69 } 70 71 }, 72 73 Date.class); 74 75 // 任務是將以上的屬性設置給指定的Book對象 76 77 BeanUtils.setProperty(book, "name", name); 78 79 BeanUtils.setProperty(book, "author", author); 80 81 BeanUtils.setProperty(book, "price",price ); 82 83 BeanUtils.setProperty(book, "date",date ); 84 85 // 查看屬性是否封裝好 86 87 System.out.println(book); 88 89 }
如果每次遇到一個復雜類型都需要自定義轉換器,那樣的話實在麻煩。大家看在開發的時候可以先查看該接口是否提供了有效的實現類。
ConvertUtils.register(new DateLocaleConverter(), Date.class);
其實真正的封裝好的數據需要存儲在數據庫中,那么javabean的數據類型應該和數據庫的數據類型保持一致,那么在聲明持久化javabean的時候需要全部為數據庫的基本數據類型。
因此大家在JavaBean中需要導入的是java.sql.Date類,這樣就直接可以將日期自動轉換了。
舉例3:實現封裝好的JavaBean對象的屬性拷貝。
1 // 實現屬性封裝數據的一個拷貝 2 3 Book copy = new Book(); 4 5 System.out.println(copy); 6 7 PropertyUtils.copyProperties(copy, book); 8 9 System.out.println(copy);
思考:如果使用BeanUtils封裝用戶的數據,那么也就是一個一個設置啊?豈不是也很麻煩?
其實在真是的環境中我們可以直接獲取用戶提交的所有的數據信息,只需要進行遍歷即可,但是為了方便快速的設置,那么可以將javabean中的屬性名和用戶提交的數據名保持一致。