设计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方法。
@H_301_273@
// 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公共方法全部内容,希望文章能够帮你解决Dao层抽取BaseDao公共方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)