设计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. win10 + ubuntu 16.04 双系统安装

    第一次写博客,有错的请指教emmmm 这是因为老师的要求在做课程设计,要用到ubuntu环境,对于这个来说,学长说的是14 16 18都很稳定,但是他在用16.04所以我也用的ubuntu16.04方 ...

  2. java面试题03

    1.一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?这个是可以的,一个“.java” ...

  3. PYTHON之路,线程

    关于多任务的理解, 代码要执行,首先得变成机器认识的东西执行,那么需要解释器.那么执行按道理,一段程序在这里就具体来说一段代码的执行吧,我们知道代码的执行是从上至下按顺序执行,那么这里有条件分支结构, ...

  4. Mac OS X L2TP Client Setup

    原文链接:http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/5.Mac_ ...

  5. The Oregon Trail 俄勒冈之旅

    发售年份 1971 平台 多平台 开发商 MECC 类型 教育娱乐 https://www.youtube.com/watch?v=QBOLN7I8omY

  6. 创建一个dynamics 365 CRM online plugin (八) - 使用Shared Variables 在plugins 之前传递data

    CRM 可以实现plugin之前的值传递. 我们可以使用SharedVariables 把值在plugin之间传递 实现plugins之间的传递非常简单,我们只需要用key value pair来配对 ...

  7. AttributePriority

    还有AttributePriority,我们可以设置编译时优先级.如果我们对目标标记了多个aspect,这样postsharp就不确定注入先后顺序,这样不能确保正确性,在vs编译时候我们会看见警告:T ...

  8. MVC5 方法扩展

    public static MvcHtmlString DataDictionaryDropDownList(this HtmlHelper htmlHelper, string name, obje ...

  9. C#中List按特定字段排序

    有一个类,如Student,有学号.数学成绩.语文成绩, 存在List列表中,要将List按数学成绩排序,怎么办呢? List<Student> scores=GetScores(); s ...

  10. mysql合并表

    有如下两张表 a +------+------+---------+ | uid | name | addtime | +------+------+---------+ | | | +------+ ...