<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0,  comments - 17,  trackbacks - 0
    來源:http://www.tkk7.com/martinx

    今天無意中在springframework中見到這個函數(shù)
    this.getHibernateTemplate().findByExampl(Object obj)

    以前沒注意到,看了一下源碼,原來就是Criteria中的Example.

    以前代碼如下

    package martin.xpost.model;

    import martin.xpost.hibernate.UserDAO;
    import martin.xpost.util.ListUtil;

    import java.util.ArrayList;
    import java.util.List;

    /**
     * 
    @author martin
     
    */

    public class User {
        
    private String id;
        
    private String userName;
        
    private String password;
        
    private String realName;
        
    private String email;
        
    private List blogEntities = new ArrayList();
        
    private List rolls = new ArrayList();
        
        
    private UserDAO service;
        
        
    //getter and setter
        public void save() {
            
    this.service.save(this);
        }


        
    public void remove() {
            
    this.service.remove(this);
        }


        
    public boolean valid() {
            
    return ListUtil.isNotEmpty(this.service.valid(this));
        }

    }

    DAO代碼如下
    package martin.xpost.hibernate.impl;

    import martin.xpost.hibernate.UserDAO;
    import martin.xpost.model.User;
    import martin.xpost.util.ListUtil;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate3.HibernateCallback;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import java.util.List;

    /**
     * 
    @author martin
     
    */

    public class HibernateUserDAO extends HibernateDaoSupport implements UserDAO {
        
    public void save(User user) {
            
    this.getHibernateTemplate().merge(user);
        }


        
    public void remove(User user) {
            
    this.getHibernateTemplate().delete(user);
        }


        
    public boolean valid(final User user) {
            List list 
    = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
                
    public Object doInHibernate(Session session) throws org.hibernate.HibernateException {
                    Query query 
    = session.createQuery("from User user where user.userName=:userName and user.password=:password");
                    query.setString(
    "userName", user.getUserName());
                    query.setString(
    "password", user.getPassword());
                    
    return query.list();
                }

            }
    );
            
    return ListUtil.isEmpty(list);
        }

    }

    重構(gòu)
    一:修改User的valid函數(shù)
        public boolean valid() {
            
    return ListUtil.isNotEmpty(this.service.find(this));
        }

    DAO中只負(fù)責(zé)和數(shù)據(jù)源打交道,我們將邏輯全部轉(zhuǎn)到model里面(就是邏輯太簡單了o_o)。

    二:修改DAO代碼
    package martin.xpost.hibernate.impl;

    import martin.xpost.hibernate.UserDAO;
    import martin.xpost.model.User;
    import martin.xpost.util.ListUtil;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import java.util.List;

    /**
     * 
    @author martin
     
    */

    public class HibernateUserDAO extends HibernateDaoSupport implements UserDAO {
        
    public void save(User user) {
            
    this.getHibernateTemplate().merge(user);
        }


        public void remove(User user) {
            
    this.getHibernateTemplate().delete(user);
        }


        
    public List find(User user) {
            
    return this.getHibernateTemplate().findByExample(user);
        }

    }

    這樣就簡單多了:)
    Test 一下:
    package martin.xpost;

    import martin.xpost.model.User;

    /**
     * 
    @author martin
     
    */

    public class UserTest extends TestBase {


        
    public void testAdd() {
            User user 
    = (User) this.getBean("user");
            user.setUserName(
    "martin");
            user.setPassword(
    "1234");
            user.setRealName(
    "martin xus");
            user.setEmail(
    "martin.xus@gmail.com");
            user.save();
            assertNotNull(user.getId());
        }


        
    public void testValid() {
            User user 
    = (User) this.getBean("user");
            user.setUserName(
    "martin");
            user.setPassword(
    "1234");
            assertTrue(user.valid());
        }


        
    public void testRemove() {
            User user 
    = (User) this.getBean("user");
            user.setUserName(
    "martin");
            user.setPassword(
    "1234");
            user.remove();
            assertNull(user.getId());
        }

    }

    第三個沒有通過:(看了一下log,原來this.getHibernateTemplate().delete(user)中user必須是持久層對象,也就是說user的id不能為空。

    再修改:首先判斷user.getId()是否為空,如果不為空,直接remvoe,否則,先find然后在remove.
        public void remove(User user) {
            
    if (null != user.getId() && !"".equals(user.getId().trim())) {
                
    this.getHibernateTemplate().delete(user);
            }
     else {
                List list 
    = find(user);
                
    if (ListUtil.isNotEmpty(list))
                    
    for (Object o : list) {
                        
    this.getHibernateTemplate().delete(o);
                    }

            }

        }

    OK,測試通過!

    posted on 2006-01-24

    posted on 2008-02-27 16:32 xyz 閱讀(764) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)文摘

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強(qiáng)大的開源,跨平臺的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
    • codelite官網(wǎng)
    • dev-c++
    • Dev-C++是一個C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設(shè)計(jì)

    w3c

    Wap

    webservice

    xml

    供應(yīng)鏈管理

    博客鏈接

    好網(wǎng)站

    工作流

    開源網(wǎng)

    招聘

    插件下載

    操作系統(tǒng)

    構(gòu)建可伸縮的系統(tǒng)

    構(gòu)建工具

    測試

    • IETest
    • IE官網(wǎng)
    • OpenSTA
    • Siege
    • Siege是一個壓力測試和評測工具,設(shè)計(jì)用于WEB開發(fā)這評估應(yīng)用在壓力下的承受能力

    游戲

    源碼托管

    經(jīng)營

    資源

    金融/財(cái)務(wù)

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲w码欧洲s码免费| eeuss影院ss奇兵免费com| 日韩精品免费视频| 国产成人免费片在线视频观看| 亚洲一二成人精品区| 一级a性色生活片久久无少妇一级婬片免费放 | 无码囯产精品一区二区免费| 国产aa免费视频| 亚洲人成在久久综合网站| 国产一区二区三区免费观看在线| 国产jizzjizz免费看jizz| 亚洲人成7777影视在线观看| 免费一区二区无码东京热| 亚洲AV无码乱码在线观看性色扶| 最新国产成人亚洲精品影院| 一区二区三区四区免费视频| 国产亚洲精品成人a v小说| 色窝窝亚洲AV网在线观看| 成人午夜免费福利视频| 亚洲av伊人久久综合密臀性色| 成人免费网站久久久| 国产免费av一区二区三区| 77777亚洲午夜久久多喷| 51精品视频免费国产专区| 亚洲乱码中文字幕综合| 日日躁狠狠躁狠狠爱免费视频| 免费黄色小视频网站| 亚洲中文无码av永久| 91精品导航在线网址免费| 久久亚洲精品中文字幕三区| 亚洲免费在线观看| 永久黄网站色视频免费直播| 亚洲sss综合天堂久久久| 五月亭亭免费高清在线| 亚洲影视一区二区| 1000部羞羞禁止免费观看视频| 日韩精品一区二区亚洲AV观看 | 国产va精品免费观看| 亚洲成A∨人片在线观看无码| 日韩免费人妻AV无码专区蜜桃| 国产aⅴ无码专区亚洲av|