posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Bean_to_Bean 賦值完整解決(可用在實際開發)

          Posted on 2007-09-29 09:51 G_G 閱讀(1050) 評論(2)  編輯  收藏 所屬分類: Inspiration
          約定:
          ??? bean.getXX.. 稱為 gbean
          ??? bean.setXX.. 稱為 sbean
          目的:
          gbean 多屬性 付值給 sbean 多屬性(并值有一定修改后)等復雜

          用 一句 *邏輯string* 就可以了
          多屬性不同類型 賦值了
          說明:
          1.sbean : testData 類有4個屬性 ??? personid ; workno ; hname ; dob ;
          2.gbean 類我這用的是數據庫動態類 ,有興趣的可以看看我的另一遍blog 動態面向對象數據庫操作
          ??? 數據庫 表 z_jcyy_basepersonnel 多屬性 但 personid,workno,hname 不可以為空
          3.這里 get set 賦值 使用的工具 LGUtil
          測試:
          package?myGGUtil.LGBeanUtil.test;

          import?java.util.Date;
          import?java.util.Iterator;
          import?java.util.List;
          import?org.apache.commons.beanutils.BeanUtils;
          import?org.apache.commons.jxpath.JXPathContext;
          import?myGGUtil.DBUtil.DyanDBUtils.DyanDBUtils;
          import?myGGUtil.LGBeanUtil.LGUtil;
          import?myGGUtil.LGBeanUtil.SpecialAttFun;
          import?junit.framework.TestCase;

          public?class?test?extends?TestCase?{
          ???

          ??? //只有一條數據的 一對一
          ????
          public?void?testONE_TO_ONE()throws?Exception{

          ??? ??? //得到修改的 數據'0301003300
          ' dob 時間為當前 一條值
          ????????DyanDBUtils?dyd?
          =?new?DyanDBUtils();
          ????????List?list?
          =?dyd.select("select?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?=?'0301003300'");
          ????????BeanUtils.setProperty(?list.get(
          0)?,"dob",new?Date());?
          ????????dyd.updateOrInsert(list.get(
          0));
          ????????List?listD?
          =?dyd.select("select?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?=?'0301003300'");

          ??? ??? //這使用 LGutil 目的是 包, 把
          數據'0301003300'的 personid,workno,hname,dob 值通過一定邏輯賦值
          ????????LGUtil?lb?
          =?new?LGUtil();
          ????????lb.setDataList(listD);?? //數據加入? : 就是 gbean
          ????????lb.setMapping(LGUtil.ONE_TO_ONE);?? //定義是一對一 get -> set
          ????????lb.setVbClass(testData.
          class); // sbean 類
          ????????lb.setAttrLg(Date.
          class,"?./${.+}?","action:date($this,'yy-MM-dd')");
          ??? ??? //把gbean數據為Date類型的付值給 sbean 的string類型 并以 'yy-MM-dd'時間字符格式
          ?

          ????????lb.setAttrLg(String.
          class,"./${.+}"); //String 普通付值
          ????????
          ????????lb.setFun(
          new?SpecialAttFun(){
          ????????????
          public?void?action(JXPathContext?temD,?JXPathContext?temV,?int?step,?JXPathContext?all)?{
          ????????????????temV.setValue(
          "hname","heha"?); //在特殊值 hname 改為 heha (呵哈 我的口號哦^_^)
          ????????????}
          ????????});
          ????????
          ????????testData?oo?
          =?(testData)lb.getVBean().get(0)?;
          ??? ??? //sbean 的值輸出 :
          ????????System.out.println(oo.getPersonid()
          +":"+oo.getHname()+":"+oo.getWorkno()+":"+?oo.getDob()?);
          ???????
          ??? ??? //測試結束 數據庫 改回去 dob 為空
          ????????BeanUtils.setProperty(?list.get(
          0)?,"dob",null);?
          ????????dyd.updateOrInsert(list.get(
          0));
          ????}
          ???
          ??? //多條數據的
          ? :就是 gbean多 -> sbean
          ????public?void?testMANY_TO_ONE()throws?Exception{
          ????????DyanDBUtils?dyd?
          =?new?DyanDBUtils();
          ????????List?list?
          =?dyd.select("select?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?like?'03010033%'?");
          ??? ??? // 得到多條數據

          ????????LGUtil?lb?
          =?new?LGUtil();
          ????????lb.setDataList(list);
          ????????lb.setMapping(LGUtil.MANY_TO_ONE);
          ????????lb.setVbClass(testData.
          class);
          ????????lb.setAttrLg(
          "sum(./${workno})");? //把屬性 workno 的全部值 向加 并 付值給 sbean.workno
          ????????
          ????????testData?oo?
          =?(testData)lb.getVBean().get(0)?;
          ????????System.out.println(oo.getWorkno()); //輸出 workno
          ????}

          ??? //多數據的一對一? gbean多 -> sbean多
          ????
          public?void?testOne_to_one()throws?Exception{
          ????????DyanDBUtils?dyd?
          =?new?DyanDBUtils();
          ????????List?listd?
          =?dyd.select("select?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?=?'0301003300'");
          ????????BeanUtils.setProperty(?listd.get(
          0)?,"dob",new?Date());?
          ????????dyd.updateOrInsert(listd.get(
          0));
          ????????List?list?
          =?dyd.select("select?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?=?'0301003300'");
          ??? ?? //這 030100330 數據改值 下面 展現需要 (有不同哦)
          ??? ??
          ????????LGUtil?lb?
          =?new?LGUtil();
          ????????lb.setDataList(dyd.select(
          "select?t.dob,?t.*?from?z_jcyy_basepersonnel?t?where?t.personid?like?'03010033%'"))?;
          ????????lb.setMapping(LGUtil.ONE_TO_ONE);
          ????????lb.setVbClass(testData.
          class);
          ????????
          ????????lb.setAttrLg(
          "${.+}");//全付值?
          ??????? lb.setAttrLg(Date.class," ./${.+} ","action:date($this,'yy-MM-dd')"); //date 給格式

          ????????
          for(Iterator?it=lb.getVBean().iterator();it.hasNext();?){
          ????????????testData?oo?
          =?(testData)it.next();
          ????????????System.out.println(oo.getPersonid()
          +":"+oo.getHname()+":"+oo.getWorkno()+":"+?oo.getDob()?);
          ????????}
          ????????
          ????????BeanUtils.setProperty(?list.get(
          0)?,"dob",null);?
          ????????dyd.updateOrInsert(list.get(
          0));
          ????}?
          }

          結果:
          //方法 testONE_TO_ONE(): dob為'yy-MM-dd'
          0301003300:heha:3300:07-09-29

          //方法testMANY_TO_ONE() workno 全加 就是方法3 的workno全加 (大家可以看看哦)
          174005.0
          //方法testOne_to_one() 全付值 (簡單展示 也可以對沒個屬性修改付 如:dob 方法一樣)
          0301003300:張金棟:3300:07-09-29
          0301003301:谷嘉奇:3301:78-09-21
          0301003302:閆國春:3302:78-12-24
          0301003304:解國強:3304:77-08-17
          0301003305:任志勇:3305:71-10-20
          0301003306:張寧:3306:74-10-13
          0301003307:閆立文:3307:70-07-05
          0301003308:鄧志山:3308:74-02-28
          0301003309:劉承謙:3309:67-12-30
          0301003310:郭愛軍:3310:75-11-21
          0301003312:楊濤:3312:73-08-01
          0301003313:喬迎松:3313:74-05-27
          0301003314:徐志斌:3314:69-03-14
          0301003323:黃向東:3323:72-07-30
          0301003324:高國良:3324:73-11-17
          0301003326:高杰:3326:74-02-10
          0301003329:葛燕京:3329:74-10-29
          0301003331:趙震:3331:75-01-07
          0301003333:郝君平:3333:74-03-12
          0301003339:孫雪峰:3339:73-03-28
          0301003340:劉紹明:3340:74-12-23
          0301003341:郭金江:3341:73-06-07
          0301003342:趙福軍:3342:74-01-17
          0301003343:劉勇:3343:74-07-04
          0301003349:鄭巖:3349:73-11-29
          0301003350:周勇:3350:75-06-03
          0301003352:許東波:3352:73-11-30
          0301003353:于華濤:3353:71-11-08
          0301003354:陳建宏:3354:71-11-21
          0301003355:王福祿:3355:70-11-16
          0301003357:曹小軍:3357:75-09-05
          0301003358:耿龍:3358:76-04-09
          0301003359:麻然松:3359:74-04-05
          0301003361:侯亮:3361:77-11-01
          0301003362:翁寶重:3362:73-10-06
          0301003364:李結:3364:74-12-08
          0301003367:張建杰:3367:70-01-03
          0301003369:王琪:3369:76-03-23
          0301003370:劉洪濤:3370:77-10-26
          0301003371:張兆鵬:3371:76-06-21
          0301003373:王飛虎:3373:74-12-06
          0301003375:王愛軍:3375:74-01-02
          0301003376:李小發:3376:72-12-20
          0301003377:楊京海:3377:78-08-12
          0301003379:王羽:3379:77-10-27
          0301003380:周鳳昆:3380:74-02-16
          0301003381:王建新:3381:76-05-11
          0301003384:盧紅峰:3384:77-11-03
          0301003387:解瑞杰:3387:72-05-15
          0301003390:李振盈:3390:76-10-03
          0301003393:馬強:3393:75-10-03
          0301003397:齊永強:3397:77-04-06

          有興趣的可以看看我花了3 天寫的代碼(重構過一次應該還是可以看看的 )
          下載:
          myGGUtil.rar
          包說明:
          ?本次 代碼在 myGGUtil.LGBeanUtil.LGUtil 下 (^_^)大家提點意見哦 !
          我希望這個好的想法 能成一個框架 哦~~~
          ?

          評論

          # re: Bean_to_Bean 付值完整解決(可用在實際開發)  回復  更多評論   

          2007-09-29 10:40 by 千里冰封
          呵呵,老兄,應該是賦值吧,不應該是付值

          # re: Bean_to_Bean 賦值完整解決(可用在實際開發)  回復  更多評論   

          2007-09-29 12:05 by G_G
          謝謝提醒
          主站蜘蛛池模板: 双鸭山市| 名山县| 石门县| 冷水江市| 杂多县| 木兰县| 高淳县| 晋城| 务川| 巴南区| 达州市| 南康市| 东阿县| 海晏县| 龙川县| 军事| 西平县| 海兴县| 宜丰县| 金昌市| 临沭县| 兰州市| SHOW| 云和县| 安岳县| 苗栗县| 甘南县| 乌拉特后旗| 灵丘县| 磐石市| 霍山县| 铜鼓县| 恩施市| 武夷山市| 民权县| 苍南县| 霍山县| 沈阳市| 谢通门县| 琼海市| 枣阳市|