一、Dao層接口java
package com.life.dao; import java.util.List; import java.util.Map; import org.hibernate.Query; public interface IDao<T> { /** * 根據id查找實體 * * @param clazz * @param id * @return */ public T find(Class<T> clazz, int id); public void create(T t); public void save(T t); public void delete(T t); /** * 查詢某頁實體 * @param hql 查詢語句 * @param firstResult 從第幾條開始,注意索引從0開始 * @param maxResults 最多返回的數據條數 * @param map 參數鍵值對 * @return */ public List<T> list(String hql, int firstResult, int maxResults, Map<String, Object> map); public Query getQuery(String hql, Map<String, Object> map); /** * 查詢實體 * @param hql * @param map * @return */ List<T> list(String hql, Map<String, Object> map); /** * 獲取記錄總數 * @param hql * @param map * @return */ int getTotalCount(String hql, Map<String, Object> map); }
Dao層實現spring
package com.life.dao.impl; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.life.dao.IDao; public class DaoImpl<T> implements IDao<T> { private SessionFactory sessionFactory; @Override public T find(Class<T> clazz, int id) { // TODO Auto-generated method stub return (T) getSession().get(clazz, id); } @Override public void create(T t) { // TODO Auto-generated method stub getSession().persist(t); } @Override public void save(T t) { // TODO Auto-generated method stub getSession().saveOrUpdate(t); } @Override public void delete(T t) { // TODO Auto-generated method stub getSession().delete(t); } @Override public List<T> list(String hql, Map<String, Object> map) { // TODO Auto-generated method stub Query query = getQuery(hql, map); List<T> list = query.list(); return list; } @Override public int getTotalCount(String hql, Map<String, Object> map) { // TODO Auto-generated method stub Query query = getQuery(hql, map); System.out.println("hql"+hql); Object obj = query.uniqueResult(); return ((Long) obj).intValue(); } @Override public List<T> list(String hql, int firstResult, int maxResults, Map<String, Object> map) { // TODO Auto-generated method stub Query query = getQuery(hql, map); List<T> list = query.setFirstResult(firstResult) .setMaxResults(maxResults).list(); System.out.println("起始:"+firstResult); System.out.println("最大值:"+maxResults); System.out.println("實際值:"+list.size()); return list; } public Session getSession() { return sessionFactory.getCurrentSession(); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public Query getQuery(String hql, Map<String, Object> map) { Query query = getSession().createQuery(hql); // TODO Auto-generated method stub if (map != null) { Set<String> keySet = map.keySet(); for (String string : keySet) { Object obj = map.get(string); //這裏考慮傳入的參數是什麼類型,不一樣類型使用的方法不一樣 if(obj instanceof Collection<?>){ query.setParameterList(string, (Collection<?>)obj); }else if(obj instanceof Object[]){ query.setParameterList(string, (Object[])obj); }else{ query.setParameter(string, obj); } } } return query; } }
Service層接口session
package com.life.service; import java.util.List; import java.util.Map; /** * 這個父接口不能做爲bean在applicationContext.xml中,由於serviceImpl是虛函數 * * @author JL Service接口,基本方法 */ public interface IService<T> { /** * 根據id和對象類查找實體 */ public T find(Class<T> clazz, int id); /** * 建立實體 */ public void create(T t); /** * 保存實體 */ public void save(T t); /** * 刪除實體 */ public void delete(T t); /** * 分頁實體 */ public List<T> list(String hql, int firstResult, int maxResults, Map<String, Object> map); int getTotalCount(String hql, Map<String, Object> map); List<T> list(String hql, Map<String, Object> map); List<T> listPage(String hql, int page, int maxResults, Map<String, Object> map); }
Service層實現app
package com.life.service.impl; import java.util.List; import java.util.Map; import com.life.dao.IDao; import com.life.service.IService; /** * 因爲各個實體類的create()方法有不一樣的業務邏輯(例如建立用戶前須要檢查帳號是否已經存在),因此把類定義成abstract * 把create()方法定義成abstract,由具體的Service單獨實現 * @author JL */ public abstract class ServiceImpl<T> implements IService<T>{ /** * 經過spring的IoC注射進來 */ protected IDao<T> dao; public IDao<T> getDao() { return dao; } public void setDao(IDao<T> dao) { this.dao = dao; } @Override public T find(Class<T> clazz, int id) { // TODO Auto-generated method stub return dao.find(clazz, id); } @Override public void create(T t){ dao.create(t); }; @Override public void save(T t) { // TODO Auto-generated method stub dao.save(t); } @Override public void delete(T t) { // TODO Auto-generated method stub dao.delete(t); } @Override public List<T> list(String hql, Map<String, Object> map) { // TODO Auto-generated method stub return dao.list(hql, map); } @Override public int getTotalCount(String hql, Map<String, Object> map) { // TODO Auto-generated method stub return dao.getTotalCount(hql, map); } @Override public List<T> list(String hql, int firstResult, int maxResults, Map<String, Object> map) { // TODO Auto-generated method stub return dao.list(hql, firstResult, maxResults, map); } @Override public List<T> listPage(String hql, int page, int maxResults, Map<String, Object> map) { // TODO Auto-generated method stub return dao.list(hql, maxResults*(page-1), maxResults, map); } }
Doneide