posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Bean_to_Bean 赋值完整解决(可用在实际开发)

Posted on 2007-09-29 09:51 G_G 阅读(1027) 评论(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
谢谢提醒

只有注册用户登录后才能发表评论。


网站导航: