设计IBseDao接口,定义公共的CRUD方法。

// IBaseDao 接口,定义公共的CRUD方法
public interface IBaseDao<T> { public void add(T t);
public void update(T t);
public void delete(T t);
public T getById(int id);
public List<T> getList(int startIndex,int pageSize);
public int getTotalCount(); }
// BaseDaoImpl接口,实现公共的CRUD方法
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
private Class<T> entityClass; // 子类的实例化需调用父类的无参构造方法,通过构造方法获取父类的泛型类型
public BaseDaoImpl() { // this.getClass() --> 子类的class对象, getGenericSuperclass() ---> 获取父类的Type
ParameterizedType pType = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取第一个类型参数的真实类型,只有一个泛型参数,所以写0
// ParameterizedType 参数化类型, getActualTypeArguments(),返回表示此类型实际类型参数的Type对象的数组
entityClass = (Class<T>) pType.getActualTypeArguments()[0]; } @Override
public void add(T t) { // 增加
this.getHibernateTemplate().save(t);
} @Override
public void update(T t) {// 修改
this.getHibernateTemplate().update(t);
} @Override
public void delete(T t) {// 删除
this.getHibernateTemplate().delete(t);
} @Override
public T getById(int id) { // 查询单个对象
return this.getHibernateTemplate().get(entityClass, id);
} @Override
public List<T> getList(int startIndex, int pageSize) { // 分页查询
return this.getHibernateTemplate().execute(new HibernateCallback<List<T>>() { @Override
public List<T> doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery("from " + entityClass.getName());
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
return query.list();
}
});
} @Override
public int getTotalCount() { // 查询总记录数
return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() { @Override
public Integer doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery("select count(*) from " + entityClass.getName());
Long count = (Long) query.uniqueResult();
return count.intValue();
}
});
} }
// IUserDao 继承 IBaseDao接口
public interface IUserDao extends IBaseDao<User> { }
// UserDaoImpl 继承BaseDaoImpl类,实现 IUserDao接口
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao { }

==========================================================================

Service层同理,设计IBseService接口,定义公共的CRUD方法。

// IBaseService接口,定义CRUD方法
public interface IBaseService<T> {
public void add(T t);
public void update(T t);
public void delete(T t);
public T getById(int id);
public List<T> getList(int startIndex,int pageSize);
public Page<T> getPage(String currentPage);
}
// BaseServiceImpl类,实现IBaseService接口
public abstract class BaseServiceImpl<T> implements IBaseService<T> { //提供一个抽象方法,让子类返回对应的子类Dao
public abstract IBaseDao<T> getBaseDao(); @Override
public void add(T t) {
getBaseDao().add(t);
} @Override
public void update(T t) {
getBaseDao().update(t);
} @Override
public void delete(T t) {
getBaseDao().delete(t);
} @Override
public T getById(int id) {
return getBaseDao().getById(id);
} @Override
public List<T> getList(int startIndex, int pageSize) {
return getBaseDao().getList(startIndex, pageSize);
} @Override
public Page<T> getPage(String currentPage) {
Page<T> page = new Page<>(1, 3);
if(currentPage!=null){
page.setCurrentPage(Integer.parseInt(currentPage));
}
int totalCount = getBaseDao().getTotalCount();
int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount/page.getPageSize()+1;
List<T> list = getList((page.getCurrentPage()-1)*page.getPageSize(),page.getPageSize());
page.setTotalPage(totalPage);
page.setList(list);
return page;
}
}
// IUserService 继承 IBaseService接口
public interface IUserService extends IBaseService<User> { }
// UserServiceImpl 继承 BaseServiceImpl类,实现IUserService 接口
public class UserServiceImpl extends BaseServiceImpl<User> implements IUserService { private IUserDao userDao; public IUserDao getUserDao() {
return userDao;
} public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
} @Override
public IBaseDao<User> getBaseDao() {
return userDao;
}
}

Dao层抽取BaseDao公共方法的更多相关文章

  1. MyBatis逆向工程生成dao层增删改查方法解释使用(转载)

    int countByExample(BUserExample example); //根据条件查询数量 /** * 示例 * public int countByExample() { * BUse ...

  2. DAO层,Service层,Controller层、View层 的分工合作

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  3. [转]DAO层,Service层,Controller层、View层

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  4. Mybatis Dao层注解及XML组合Dao的开发方式

    mybatis可以用xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法.显然 ,后者更加简单. 实体类Student   package com.zhao. ...

  5. DAO层,Service层,Controller层、View层

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  6. 分层 DAO层,Service层,Controller层、View层

    前部分摘录自:http://blog.csdn.net/zdwzzu2006/article/details/6053006 DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务 ...

  7. DAO层,Service层,Controller层、View层介绍

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  8. MyBatis框架的XML数据访问Dao层接口的组合使用

    MyBatis 的前生为Apache的开源项目iBatis.其优势在于灵活,几乎可以替代JDBC,同时提供了编程接口.目前MyBatis的数据访问Dao层不需要实现类,也不需要像JDBC那样拼接Hql ...

  9. 【DRP】-Dao层常用功能代码:增删改查

    本系列博客内容为:做DRP系统中Dao层常用功能. 该项目采用MVC架构 C(Controller)控制器,主要职责;1.取得表单参数:2.调用业务逻辑:3.转向页面 M(Model)模型,主要职责: ...

随机推荐

  1. register form code(2nd week blog)

    register form code(2nd week blog) 注册 用户名: 密码: 确认密码: 邮箱: 电话:     性别: 男 女

  2. Spring EnableWebMvc vs WebMvcConfigurationSupport

    EnableWebMvc vs WebMvcConfigurationSupport spring doc解释 WebMvcConfigurationSupport: This is the main ...

  3. React 生命周期简介

       React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树 ...

  4. c++——智能指针学习(shared_ptr和weak_ptr)

    先看一个例子:Stark和Targaryen家族你中有我,我中有你.我们设计以下类企图避免内存泄漏,使得析构函数都能调用到: #include<iostream> #include< ...

  5. python通配符之glob模块

    转自:https://blog.csdn.net/dcrmg/article/details/78309469 官方链接:https://docs.python.org/3.6/library/glo ...

  6. pycrypto安装出错的问题 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.

    前言: 需要安装 Microsoft Visual Studio2017 Community 或者buildtools 解决方案一(解决了python3.7上安装pycrypto-2.6.1的错误问题 ...

  7. ZoomIt: 非PPT演示必备辅助软件

    下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/zoomit 使用方法: 另一个免费的屏幕标注工具:Pointofix v1. ...

  8. Lattice并购案和我国FPGA发展道路

    引用 http://www.cnblogs.com/alifpga/p/9292588.html FPGA作为通信.航天.军工等领域的关键核心器件,是保障国家战略安全的重要支撑基础.近年来,随着数字化 ...

  9. linux kernel mini2440 start.S head-common.S 部分注释

    内核版本:2.6.32.2(mini2440光盘源码) github地址:https://github.com/guanglun/mini2440_uboot_linux (for_len分支 htt ...

  10. 13行代码实现:Python实时视频采集(附源码)

    一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...