设计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 { }