SSH之Hibernate的Dao層和Service層

來源:互聯網
上載者:User

標籤:style   blog   color   java   使用   io   資料   for   

1、Dao層介面

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層實現

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層介面

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層實現

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);    }}

 

Done

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.