本文查閱方法:
一、查閱目錄 —— 查閱本文目錄,肯定想要查閱的目錄標題
二、快捷「查找」 —— 在當前瀏覽器頁面,按鍵 「Ctrl+F」 按鍵組合,開啓瀏覽器的查找功能,
在查找搜索框中 輸入須要查閱的 目錄標題,即可以直接到達 標題內容 的位置。
三、學習小結 —— 文中的學習小結內容,是筆者在學習以後總結出的,開發時可直接參考其進行應用開發的內容, 進一步加快了本文的查閱 速度。(水平有限,僅供參考。) 程序員
本文目錄瀏覽器
學習小結框架
一、JavaBean屬性操做—beanutils工具包工具
二、BeanUtils 使用方法——直接使用 API 中 定義靜態方法學習
三、ConvertUtils 使用方法ui
四、Demo樣例 編碼
學習小結.net
使用BeanUtils的步驟:orm
a.導包——導入兩個Jar包commons-beanutils-1.8.3.jar 和支持包commons-logging-1.1.1.jar 對象
b.操做——直接使用其定義的靜態方法操做Bean的屬性(具體方法可查閱其文檔)
(a)給指定Bean的屬性賦值 ——
BeanUtils.setProperty(Object 目標bean, String 指定屬性的name, Object 實際參數值value)
(b)獲取指定Bean的屬性賦值 ——
BeanUtils.getProperty(Object 目標 bean, String 指定屬性的 name)
(c)將Map中的「鍵值對」數據 所有填充到指定的 JavaBean(對應屬性名)中 ——
BeanUtils.populate(Object 目標 bean, Map 存儲有源數據的 map 對象);
c.註冊轉換器——自動類型轉換,除8種基本類型外,其餘複雜類型要事先註冊類型轉換器(API或自定義)
一、JavaBean屬性操做—beanutils工具包
Apache組織開發了一套用於操做JavaBean的API,這套API考慮到了不少實際開發中的應用場景,所以在實際開發中不少程序員使用這套API操做JavaBean,以簡化程序代碼的編寫。
導入包:a.在工程下新建lib目錄,導入commons-beanutils-1.8.3.jar 和支持包commons-logging-1.1.1.jar
b.選中兩個包,右鍵build path/add to build path
Beanutils工具包的經常使用類:
BeanUtils —— 操做JavaBean 中的屬性 賦值與取值。
PropertyUtils
ConvertUtils —— 操做類型轉換器。
自定義轉換器:ConvertUtils.regsiter(Converter convert, Class clazz)
二、BeanUtils 使用方法——直接使用 API 中 定義靜態方法
a.給指定Bean的屬性賦值 ——
BeanUtils.setProperty(Object 目標bean, String 指定屬性的name, Object 實際參數值value)
備註:僅支持 8中基本類型數據 自動轉換 :字符串-- 屬性類型
其餘複雜類型的 自動轉換,須要實現 註冊 類型轉換器Converter。
b.獲取指定Bean的屬性賦值 ——
BeanUtils.getProperty(Object 目標 bean, String 指定屬性的 name)
c.將Map中的「鍵值對」數據 所有填充到指定的 JavaBean(對應屬性名)中
BeanUtils.populate(Object 目標 bean, Map 存儲有源數據的 map 對象);
備註:使用該方法時,須確保Map中鍵名稱 與 Bean中 屬性名稱 是相同的,不然就會 賦值爲 null 。
三、ConvertUtils 使用方法
一、註冊轉換器 —— ConvertUtils.regsiter(Converter 轉換器convert, Class 目標類型clazz)
備註:參數「轉換器convert」,既能夠用BeanUtils中自帶的轉換器,亦能夠用自定義的類型轉換器。
二、自定義轉換器(可以使用匿名內部類的寫法,直接在 編碼中 書寫)
new Converter (){ // 下面是自定義的類型轉換器。
public Object convert(Class type, Object value) {
//自定義的 實現類型轉換的內容代碼
}
}
四、Demo樣例:
//使用beanUtils操縱bean的屬性 ( 第三方)
public class Demo1 {
public void test1() throws Exception{
Person p=new Person();
BeanUtils.setProperty(p, "age", 456);
System.out.println(p.getAge());//456
}
public void test2() throws Exception{
String name="aaaa";
String age="123";
String password="pw";
Person p=new Person();
//支持8種基本類型自動轉換,其餘複雜類型的 轉換,須要 編寫 而且註冊類型轉換器,最多見的日起類型的 轉換器。
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "age", age);
BeanUtils.setProperty(p, "password", password);
System.out.println(p.getName());//aaaa
System.out.println(p.getAge());//123
System.out.println(p.getPassword());//pw
}
public void test3() throws Exception{
String birthday="1983-12-1";
//爲了讓日期賦值到bean的birthday屬性上,須要在 beanUtils中 註冊一個日期轉換器,以便在須要轉換時自動調用。可查 BeanUtil 的文檔。
//ConvertUtils.register(converter, clazz);
ConvertUtils.register(new Converter(){ // 下面是自定義的類型轉換器。
public Object convert(Class type, Object value) {
if(value==null) return null;
if(!(value instanceof String)){
throw new ConversionException("只支持String類型的轉換");//可查文檔,此異常父類是RunnableTimeException
}
String str=(String)value;
if(str.trim().equals("")) return null;
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd",Locale.US);
try {
return df.parse(str); //此語句將會拋出異常,可是因爲 子類不能拋出比父類更多的異常,因此只能catch
} catch (ParseException e) {
throw new RuntimeException(e); //拋出運行時異常並中止程序的執行,以便通知上層異常信息,
//並建議其修改代碼,以期提升代碼的嚴謹性。
}
}
}, Date.class);
Person p=new Person();
BeanUtils.setProperty(p, "birthday", birthday);//因上面註冊了「字符串--日起類型」 的類型轉換器,故此就不會報錯異常了。
System.out.println(p.getBirthday());//pw
System.out.println("___"+BeanUtils.getProperty(p, "birthday"));
/*
關於轉換器:BeanUtils已經爲 Converter接口 編寫不少的轉換器,
可查閱文檔中All Known Implementing Classes:中所提示的各類框架自帶轉換器。
注:其中DateLocalConverter轉換器,是針對中文樣式的,可是裏面有Bug:當輸入的字符串類型 的日期參數值爲" "時,就會拋出異常,
可考慮在編碼時避免傳入" " 值,就能夠直接使用該轉換器
Demo: ConvertUtils.register(new DateLocalConverter(), Date.class);
僅須要 這一句代碼 就能夠實現中文樣式的 「字符串--日期」 的類型轉換器:
*/
}
public void test5() throws Exception {
Map map=new HashMap();
map.put("name", "aaa");
map.put("password", "123");
map.put("brithday", "1980-09-09");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p=new Person();
//用map集合填充bean屬性,map關鍵字和bean屬性要一致
BeanUtils.populate(p, map);
}
}
敬請評論(1)若您以爲本文 有用處 —— 請留言評論,以堅決其餘 IT童鞋 閱讀本文的信心。(2)若您以爲本文 沒用處 —— 請留言評論,筆者將會改進不足,以便爲你們整理更加好用的筆記。