基ssh框架的dao层抽取

    在ssh项目的开发中经常需要书写重复的代码,如增删改查这类,既然那么烦,干嘛不抽取出来呢?所以,一顿粘贴复制将其主要方法抽取出来,方便以后用。


BaseDao接口

public interface BaseDao<T> {
	//增或改
	public void saveOrUpdate(T t);
	//增
	public void save(T t);
	//通过对象刪
	public void delete(T t);
	//通过id刪
	public void delete(Serializable id);//---->这是所有基本类型的实现类
	//通过对象改
	public void update(T t);
	//通过id查
	public T getById(Serializable id);
	//查所有记录
	public Number getTotalCount(DetachedCriteria dc);
	//分页查,返回用于分页的对象集合
	public List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize);
}

BaseDao接口的实现类:BaseDaoImp

public class BaseDaoImp<T> extends HibernateDaoSupport implements BaseDao<T> {
	
	private Class clazz;//用于接受运行期泛型类型
	
	public BaseDaoImp(){
		//获得当前类型的带有泛型类型的父类
		ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
		//获得运行期的泛型类型
		clazz = (Class) pt.getActualTypeArguments()[0];
	}
	
	
	@Override
	public void save(T t) {
		getHibernateTemplate().save(t);
	}

	@Override
	public void delete(T t) {
		getHibernateTemplate().delete(t);
	}

	@Override
	public void delete(Serializable id) {
		 T t = this.getById(id);//先取
		 getHibernateTemplate().delete(t);//再删
	}

	@Override
	public void update(T t) {
		getHibernateTemplate().update(t);
		
	}

	@Override
	public T getById(Serializable id) {
		
		return (T) getHibernateTemplate().get(clazz, id);
	}

	@Override
	public Number getTotalCount(DetachedCriteria dc) {
		//聚合函数,查数量
		 dc.setProjection(Projections.rowCount());
		 List<Long> count = (List<Long>) getHibernateTemplate().findByCriteria(dc);
		 dc.setProjection(null);//清空聚合函数,不清空的话会有条件的残留
		 if(count != null && count.size() > 0){
			 return count.get(0).intValue();
		 }else{
			 return null;
		 }
	}

	@Override
	public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
		List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start,pageSize);
		return list;
	}


	@Override
	public void saveOrUpdate(T t) {
		// TODO Auto-generated method stub
		getHibernateTemplate().saveOrUpdate(t);
	}

}

Dao层对象如要使用增删改查方法时,只需要继承BaseDaoImp和实现相应的接口就可以了,减少了不必要的代码量

public class UserDaoImp extends BaseDaoImp<User> implements UserDao {
}

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/80599566