不能回家,感觉无聊透顶,乱写点东西,打发时间 代码重构
            
    
    
        HibernateDAOORMGmail 

今天无意中在springframework中见到这个函数

代码重构
            
    
    
        HibernateDAOORMGmail this.getHibernateTemplate().findByExampl(Object obj)

以前没注意到,看了一下源码,原来就是Criteria中的Example.

以前代码如下

代码重构
            
    
    
        HibernateDAOORMGmail package martin.xpost.model;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.hibernate.UserDAO;
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.util.ListUtil;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import java.util.ArrayList;
代码重构
            
    
    
        HibernateDAOORMGmail 
import java.util.List;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail 
/** *//**
代码重构
            
    
    
        HibernateDAOORMGmail  * 
@author martin
代码重构
            
    
    
        HibernateDAOORMGmail  
*/

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

代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     
public void remove() 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
this.service.remove(this);
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     
public boolean valid() 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
return ListUtil.isNotEmpty(this.service.valid(this));
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail }

DAO代码如下
代码重构
            
    
    
        HibernateDAOORMGmail package martin.xpost.hibernate.impl;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.hibernate.UserDAO;
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.model.User;
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.util.ListUtil;
代码重构
            
    
    
        HibernateDAOORMGmail 
import org.hibernate.Query;
代码重构
            
    
    
        HibernateDAOORMGmail 
import org.hibernate.Session;
代码重构
            
    
    
        HibernateDAOORMGmail 
import org.springframework.orm.hibernate3.HibernateCallback;
代码重构
            
    
    
        HibernateDAOORMGmail 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import java.util.List;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail 
/** *//**
代码重构
            
    
    
        HibernateDAOORMGmail  * 
@author martin
代码重构
            
    
    
        HibernateDAOORMGmail  
*/

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

代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     
public void remove(User user) 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
this.getHibernateTemplate().delete(user);
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail 

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

代码重构
            
    
    
        HibernateDAOORMGmail         }
);
代码重构
            
    
    
        HibernateDAOORMGmail         
return ListUtil.isEmpty(list);
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail }

重构
一:修改User的valid函数
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     public boolean valid() 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
return ListUtil.isNotEmpty(this.service.find(this));
代码重构
            
    
    
        HibernateDAOORMGmail     }

DAO中只负责和数据源打交道,我们将逻辑全部转到model里面(就是逻辑太简单了o_o)。

二:修改DAO代码
代码重构
            
    
    
        HibernateDAOORMGmail package martin.xpost.hibernate.impl;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.hibernate.UserDAO;
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.model.User;
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.util.ListUtil;
代码重构
            
    
    
        HibernateDAOORMGmail 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import java.util.List;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail 
/** *//**
代码重构
            
    
    
        HibernateDAOORMGmail  * 
@author martin
代码重构
            
    
    
        HibernateDAOORMGmail  
*/

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

代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     public void remove(User user) 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
this.getHibernateTemplate().delete(user);
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     
public List find(User user) 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         
return this.getHibernateTemplate().findByExample(user);
代码重构
            
    
    
        HibernateDAOORMGmail     }

代码重构
            
    
    
        HibernateDAOORMGmail }

这样就简单多了:)
Test 一下:
代码重构
            
    
    
        HibernateDAOORMGmail package martin.xpost;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
import martin.xpost.model.User;
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail 
/** *//**
代码重构
            
    
    
        HibernateDAOORMGmail  * 
@author martin
代码重构
            
    
    
        HibernateDAOORMGmail  
*/

代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail 
public class UserTest extends TestBase 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 
代码重构
            
    
    
        HibernateDAOORMGmail 代码重构
            
    
    
        HibernateDAOORMGmail     
public void testAdd() 代码重构
            
    
    
        HibernateDAOORMGmail {
代码重构
            
    
    
        HibernateDAOORMGmail         User user 
= (User) this.getBean("user");
代码重构
            
    
    
        HibernateDAOORMGmail         user.setUserName(
"martin");
代码重构
            
    
    
        HibernateDAOORMGmail         user.setPassword(
"1234");
代码重构
            
    
    
        HibernateDAOORMGmail         user.setRealName(
"martin xus");
代码重构
            
    
    
        HibernateDAOORMGmail         user.setEmail(
"martin.xus@gmail.com");
代码重构
            
    
    
        HibernateDAOORMGmail         user.save();
代码重构
            
    
    
        HibernateDAOORMGmail         assertNotNull(user.getId());
代码重构
            
    
    
        HibernateDAOORMGmail     }

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

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

代码重构
            
    
    
        HibernateDAOORMGmail }

第三个没有通过:(看了一下log,原来this.getHibernateTemplate().delete(user)中user必须是持久层对象,也就是说user的id不能为空。

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

代码重构
            
    
    
        HibernateDAOORMGmail         }

代码重构
            
    
    
        HibernateDAOORMGmail     }

OK,测试通过!