ssh框架增刪改查Dao層抽取
阿新 • • 發佈:2019-02-13
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{ }