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

maven项目Dao层优化的更多相关文章

  1. ssm项目dao层方法异常:org.apache.ibatis.binding.BindingException: Invalid bound statement

    在IntelliJ IDEA中用ssm框架搭建了一个demo项目,在执行到dao层方法时抛出这个异常: org.apache.ibatis.binding.BindingException: Inva ...

  2. SpringBoot+MyBatis项目Dao层最简单写法

    前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...

  3. SSH项目Dao层和Service层及Action的重用

    泛型 1.泛型的定义 1.泛型是一种类型    1.关于Type            //是一个标示接口,该标示接口描述的意义是代表所有的类型        public interface Typ ...

  4. 01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层

    作者:nnngu 项目源代码:https://github.com/nnngu/nguSeckill 这是一个整合IDEA+Maven+SSM框架的高并发的商品秒杀项目.我们将分为以下几篇文章来进行详 ...

  5. IDEA下Maven项目搭建踩坑记----2.项目编译之后 在service层运行时找不到 com.dao.CarDao

    项目写的差不多 想运行一下,然后发现运行到Service层的时候报错说找不到Dao层文件 ,纠结半天之后看了下编译好的项目文件,发现mapper文件下边是空的, 于是就百度找一下原因,结果说是IDEA ...

  6. 四、spring集成ibatis进行项目中dao层基类封装

    Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...

  7. IDEA项目搭建四——使用Mybatis实现Dao层

    一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...

  8. SSH 项目中 用Hibernate底层 简单的封装DAO层

    废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用. 首先:必须要继承的 public class CommonDao extends Hiberna ...

  9. 039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层

    我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件: YYCGD:采购单模板表. YYCGD2014:采购单动态生成表,由存储过程生成. YYCGDMX:采购单明细 ...

随机推荐

  1. JS制作一个通用的商城版历史浏览记录

    正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) {    var endst ...

  2. 【BZOJ4367】[IOI2014]holiday假期 分治+主席树

    [BZOJ4367][IOI2014]holiday假期 Description 健佳正在制定下个假期去台湾的游玩计划.在这个假期,健佳将会在城市之间奔波,并且参观这些城市的景点.在台湾共有n个城市, ...

  3. angualar入门学习-- 自定义指令 认识属性

    个AngularJS指令在HTML代码中可以有四种表现形式: 1.作为一个新的HTML元素来使用 2.作为一个元素的属性来使用 3.作为一个元素的类来使用 4.作为注释来使用 一.创建指令 angul ...

  4. 巨蟒python全栈开发数据库前端5:JavaScript1

    1.js介绍&变量&基础数据类型 2.类型查询&运算符&if判断&for循环 3.while循环&三元运算符 4.函数 5.今日总结 1.js介绍&am ...

  5. 微信支付 统一订单 $order = WxPayApi::unifiedOrder($input); 断点调试

    定位至 CODE /** * 将xml转为array * @param string $xml * @throws WxPayException */ public static function I ...

  6. 分布式计算 要不要把写日志独立成一个Server Remote Procedure Call Protocol

    w https://en.wikipedia.org/wiki/Remote_procedure_call In distributed computing a remote procedure ca ...

  7. windows python easy_install ,pip. selenium

    http://www.cnblogs.com/fnng/p/3157639.html 搭建平台windows 准备工具如下: unknown encoding: cp65001异常 python安装后 ...

  8. 第08章—整合Spring Data JPA

    spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...

  9. LinkedList 的get方法分析---java

    Java LinkedList.get() 获取元素   Get(int)方法的实现在remove(int)中已经涉及过了.首先判断位置信息是否合法(大于等于0,小于当前LinkedList实例的Si ...

  10. vue事件修饰器

    事件修饰器 Vue.js 为 v-on 提供了 事件修饰符.通过由点(.)表示的指令后缀来调用修饰符.· .stop .prevent .capture .self <div id=" ...