ssh框架增删改查Dao层抽取

xiaoxiao2021-02-28  33

Dao层功能大部分都是实现增删改查,功能比较单一,因此可以抽取成一个公共类被继承,简化代码。

抽取的思想流程如下图所示:

由于是面向接口编程,我们首先创建一个方法声明。

1.创建接口BaseDao

package cn.itcast.dao; import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; public interface BaseDao<T> { //增 void save(T t); //根据id删 void delete (Serializable id); //根据对象删 void delete(T t); //改 void update (T t); //根据id查询 T getById(Serializable id); //查询总数 Integer getTotalCount(DetachedCriteria dc); //查询分页数据,返回对象的集合 List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize); }

2.创建方法具体实现类BaseDaoImpl

package cn.itcast.dao.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import cn.itcast.dao.BaseDao; public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{ private Class clazz;//用于接收运行期泛型类型 public BaseDaoImpl(){ //获得当前类型的带有泛型类型的父类 ParameterizedType typeClazz = (ParameterizedType) this.getClass().getGenericSuperclass(); clazz = (Class) typeClazz.getActualTypeArguments()[0];//获得运行的泛型类型 } @Override public void save(T t) { getHibernateTemplate().save(t); } @Override public void delete(Serializable id) { T byId = this.getById(id);//先取 getHibernateTemplate().delete(byId);//再删 } @Override public void delete(T t) { 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 Integer getTotalCount(DetachedCriteria dc) { //设置聚合函数,查数量 dc.setProjection(Projections.rowCount()); List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc); //清空聚合函数,防止影响其他查询结果 dc.setProjection(null); if(list!=null&&list.size()>0){ return (Integer) list.get(0); }else{ return null; } } @Override public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) { //start 从第几条数据开始查 return (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize); } }

3.Dao层:具体的对象实现增删改查——比如Customer

3.1首先创建CustomerDao接口并继承BaseDao接口

package cn.itcast.dao; import cn.itcast.domain.Customer; public interface CustomerDao extends BaseDao<Customer>{ }

3.2然后创建CustomerDaoImpl类继承BaseDaoImpl

package cn.itcast.dao.impl; import cn.itcast.dao.CustomerDao; import cn.itcast.domain.Customer; public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao{ }
转载请注明原文地址: https://www.6miu.com/read-2650354.html

最新回复(0)