個人的にhibernateで書いた汎用Dao

7721 ワード

import java.io.Serializable;
import java.util.List;

import com.ssh.common.Order;

//    ,     
public interface IBaseDao{
	
	//    
	Serializable save(T t);
	
	void saveOrUpdate(T t);
	
	// ,    
	void delete(T t);
	// ,    
	void deleteAll(List t);
	// ,  id  
	void deleteById(Integer id);
	// ,      
	void deleteByPropertie(String name, String value);
	
	// 
	void update(T t);
	// 
	void update(List list);
	
	//    
	List queryAll();
	// ,        
	List querybyProperties(String name, String value);
		
	List querybyProperties(String name, List values);
	
	List querybyProperties(List names, List values);
	
	List querybyProperties(List names, List values, String orderBy, Order order);
	
	// ,  id    
	T queryById(Integer id);
	
	// ,        
	T queryUnique(String name, String value);

}
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public abstract class BaseDaoImpl extends HibernateDaoSupport implements IBaseDao{

	//    sessionFactory
	@Autowired
	private void setMySessionFactory(SessionFactory sessionFactory){
	  //          ,@Resource    name   type    。
	  super.setSessionFactory(sessionFactory);
	 }
	
	private Class clazz;
	
    @SuppressWarnings("unchecked")
	public BaseDaoImpl(){
        //        T     
        //    new         
        ParameterizedType pt =(ParameterizedType) this.getClass().getGenericSuperclass();
        //              
        this.clazz = (Class) pt.getActualTypeArguments()[0];
     }
	
	public Serializable save(T t) {
		return getHibernateTemplate().save(t);
	}

	public void delete(T t) {
		
		 getHibernateTemplate().delete(t);
	}

	public void deleteById(Integer id) {
		
		T t=queryById(id);
		getHibernateTemplate().delete(t);
	}

	public void update(T t) {
		getHibernateTemplate().update(t);
	}

	@SuppressWarnings("unchecked")
	public List queryAll() {
		
		//  from   (clazz.getSimpleName())
		return (List) getHibernateTemplate().find("from "+clazz.getSimpleName());
	}

	public T queryById(Integer id) {
		return getHibernateTemplate().get(clazz, id);
	}

	public T queryUnique(String name, String value){
		Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(clazz).add(Restrictions.eq(name, value));
		return (T) criteria.uniqueResult();
	}

	public void deleteAll(List t) {
		getHibernateTemplate().deleteAll(t);
	}

	public void deleteByPropertie(String name, String value) {
		T t=queryUnique(name, value);
		getHibernateTemplate().delete(t);
	}

	public void update(List list) {
		for (T t : list) {
			getHibernateTemplate().update(t);
		}
	}

	
	//sessionFactory          session。Spring                   session      ,          ,
	//               session          
	
	//      
	public List querybyProperties(String name, List values) {
		Criteria criteria=getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(clazz).add(Restrictions.in(name, values));
		//         Session     ,             ,    session       ,spring         session
		//Criteria criteria = getSession().createCriteria(clazz).add(Restrictions.in(name, values));
		return criteria.list();
	}

	//      ,                    
	public List querybyProperties(List names, List values) {
		return querybyProperties(names, values, null, null);
	}

	
	/* names    
	 * values      
	 * orderBy     
	 * order     
	 */ 
	public List querybyProperties(List names, List values,
			String orderBy, com.ssh.common.Order order) {
		
		//     criteria  
		Criteria criteria=getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(clazz);
		
		// values    
		if (values != null) {
			for (int i = 0; i < values.size(); i++) {
				
				//     value
				Object value = values.get(i);
				if (value instanceof Collection) {
					//    (name)     value,    ,  value     
					criteria.add(Restrictions.in(names.get(i), (Collection>) value));
				}
				else if (value instanceof Object[]) {
					//  value     
					criteria.add(Restrictions.in(names.get(i), (Object[]) value));
				}
				else {
					//  value     value
					criteria.add(Restrictions.eq(names.get(i), value));
				}
			}
		}
		//       ,   order      ,        ,           
		if(order!=null&&order==com.ssh.common.Order.desc){
			 criteria.addOrder(Order.desc(orderBy)); 
		}
		if(order!=null&&order==com.ssh.common.Order.asc){
			 criteria.addOrder(Order.asc(orderBy)); 
		}
		return criteria.list();
	}
	
	//     save  update  
	public void saveOrUpdate(T t) {
		getHibernateTemplate().saveOrUpdate(t);
	}
	
	//      ,    list
	public List querybyProperties(String name, String value) {
		Criteria criteria=getSessionFactory().getCurrentSession().createCriteria(clazz).add(Restrictions.eq(name, value));
		return criteria.list();
	}

}

は の のブログで た DAOで、ついでにメモして、 の なときに します.
package spring.demo.dao;

import java.io.Serializable;
import java.util.List;

public interface IGeneralDao {
	
	public  T findById(Class type, Serializable id);    
    
    public  List findAll(Class type);    
    
    public void save(Object... entities);    
    
    public void update(Object... entities);    
    
    public void saveOrUpdate(Object entity);    
    
    public void delete(Object... entities);    
    
    public void deleteById(Class> type, Serializable id);    
    
    public void refresh(Object... entities);    
    
    public void flush();  
}
package spring.demo.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;

import spring.demo.dao.IGeneralDao;

public abstract class GeneraDao implements IGeneralDao{
	
	@Autowired
	private HibernateTemplate hibernateTemplate;

	public  T findById(Class type, Serializable id) {
		
		return hibernateTemplate.get(type, id);
	}

	public  List findAll(Class type) {
		
		return hibernateTemplate.loadAll(type);
	}

	public void save(Object... entities) {
		for (Object entity: entities) {
			hibernateTemplate.save(entity);
		}
			
	}

	public void update(Object... entities) {
		for (Object entity : entities) {
			hibernateTemplate.update(entity);
		}
	}

	public void saveOrUpdate(Object entity) {
		hibernateTemplate.saveOrUpdate(entity);
	}

	public void delete(Object... entities) {
		for (Object entity : entities) {
			if(entity!=null){
				hibernateTemplate.delete(entity);
			}
		}
	}

	public void deleteById(Class> type, Serializable id) {
		if(id==null)
			return;
		Object entity=findById(type, id);
		if(entity==null)
			return;
		delete(entity);
	}

	public void refresh(Object... entities) {
		for (Object entity : entities) {
			hibernateTemplate.refresh(entity);
		}
	}

	public void flush() {
		hibernateTemplate.flush();
	}

}

その もさらに され、 され、 や りがあれば、 くのネットユーザーの を します.