平时我们习惯一个实体类就对应一个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 {
  }

最新文章

  1. [备查]使用 SPQuery 查询 &quot;Person or Group&quot; 字段
  2. [GodLove]Wine93 Tarining Round #3
  3. ios 同步Get请求的实现
  4. 离线渲染中的不规则光源(Meshlight)
  5. [原创]DELPHI木马DIY之生成服务端
  6. JavaScript: JavaScript的简介和入门代码演示
  7. 使用Zxing实现扫二维码描
  8. HDU 4630、BOJ 某题
  9. Angular2,React集成
  10. 最近提交一个mysql5.7的bug,提醒自己以后注意写SQL要规范
  11. MySql-5.7.17-20解压缩版安装配置
  12. DeepLearning.ai-Week4-Deep Learning &amp; Art: Neural Style Transfer
  13. java学习笔记41(数据库连接池 C3p0连接池)
  14. 浅谈Java多线程中的join方法
  15. 协程(Coroutine)并不是真正的多线程
  16. [学习]仿照cnblog 搭建 Oracle RAC 双节点 困.. 后续做不下去了..
  17. jQuery的动画与特效
  18. 注册google账号时出现手机号的问题
  19. 静态实现AOP(翻译自MSDN)
  20. QDUOJ 东北大炸弹 宝岛地图-枚举+数组记录+前缀和

热门文章

  1. asp.net 上传XML,txt 直接读取文件内容
  2. 【bzoj4518】[Sdoi2016]征途 斜率优化dp
  3. LeetCode-Integer Breaks
  4. 170302、 Apache 使用localhost(127.0.0.1)可以访问,使用本机局域网IP(192.168.2.*)不能访问
  5. 火狐老是弹出下载openh264-win32.zip怎么取消
  6. sql---字段类型转换,sql获取当前时间
  7. 利用jdt快速实现pmd的功能
  8. django模板之导入与继承
  9. Android ViewGroup onInterceptTouchEvent
  10. Linux学习笔记(9)linux网络管理与配置之一——Linux基础网络命令与学习大纲(0)