maven项目Dao层优化

  平时我们习惯一个实体类就对应一个dao类,这样做,增删改查都大同小异,只是实体类对象不一样而已,因此,我们可以把公用的方法抽取来,建立一个IBaseDao接口,如下: 

  public interface IBaseDao<T> {

  //增加
  public Serializable save(T o);
  //删除
  public void delete(T o);
  //更改
  public void update(T o);
  //查找(单个)
  public T get(String hql,Map<String,Object> params);
  //查找列表
  public List<T> find(String hql);
  //根据条件查找
  public List<T> find(String hql,Map<String,Object> params);

  }

对应的实现类:BaseDao 

  @Repository("baseDao")
  public class BaseDaoImp<T> implements IBaseDao<T> {

  @Resource
  private SessionFactory sessionFactory;
  public Serializable save(T o) {
  return sessionFactory.getCurrentSession().save(o);
  }

  public void delete(T o) {
  sessionFactory.getCurrentSession().delete(o);
  }

  public void update(T o) {
  sessionFactory.getCurrentSession().update(o);
  }

  @SuppressWarnings("unchecked")
  public T get(String hql, Map<String, Object> params) {
  Query q=sessionFactory.getCurrentSession().createQuery(hql);
  if(params!=null&&!params.isEmpty()){
  for(String key:params.keySet()){
  q.setParameter(key, params.get(key));
  }
  }
  List<T> l=q.list();
  if(l!=null&&l.size()>0){
  return l.get(0);
  }
  return null;
  }

  @SuppressWarnings("unchecked")
  public List<T> find(String hql) {
  return sessionFactory.getCurrentSession().createQuery(hql).list();
  }

  @SuppressWarnings("unchecked")
  public List<T> find(String hql, Map<String, Object> params) {
  Query q=sessionFactory.getCurrentSession().createQuery(hql);
  if(params!=null&&!params.isEmpty()){
  for(String key:params.keySet()){
  q.setParameter(key, params.get(key));
  }
  }
  return q.list();
  }
  }

 每一个实体类对应的接口只要去继承基接口IBaseDao,而实体类去继承BaseDaoImp类 ,同时实现对应的接口即可,这样大大减少了代码量,如下: 

  public interface IUserDao extends IBaseDao<Tuser> {

 

  }

 @Repository("userDao")
  public class UserDao extends BaseDaoImp<Tuser> implements IUserDao {
  }

posted @ 2016-06-10 00:08  gdpuzxs  阅读(1266)  评论(0编辑  收藏  举报