SSH之Hibernate的Dao層和Service層

一、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

相關文章
相關標籤/搜索