1、创建一个泛型通用接口:IBaseDao<T>
package com.msit.oa.base.dao;
import java.util.List;
/**
* 泛型通用dao接口
* @author Administrator
*
*/
public interface IBaseDao<T> {
public void add(T t);//添加
public void delete(Long id);//删除
public void update(T t);//更新
public T getObjectById(Long id);//得到对象根据id
public List<T> getObjectAll();//得到对象list
public List<T> getObjectByIds(Long[] ids);//得到对象list根据id数组
}
2、创建实现IBaseDao<T>的实现类BaseDaoImpl<T>
package com.msit.oa.base.dao;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;
@SuppressWarnings("unchecked")
@Transactional
public class BaseDaoImpl<T> implements IBaseDao<T> {
// 注入sessionFactory
@Resource
protected SessionFactory sessionFactory;
Class<T> clazz;
// 得到T的真实类型
public BaseDaoImpl() {
ParameterizedType pType = (ParameterizedType) this.getClass()
.getGenericSuperclass();
clazz = (Class<T>) pType.getActualTypeArguments()[0];
}
//添加
public void add(T t) {
sessionFactory.getCurrentSession().save(t);
}
//删除
public void delete(Long id) {
sessionFactory.getCurrentSession().delete(
sessionFactory.getCurrentSession().get(clazz, id));
}
//得到对象list
public List<T> getObjectAll() {
return sessionFactory.getCurrentSession().createQuery(
"from " + clazz.getSimpleName()).list();
}
//得到对象根据id
public T getObjectById(Long id) {
return (T) sessionFactory.getCurrentSession().get(clazz, id);
}
//得到对象list根据id数组
public List<T> getObjectByIds(Long[] ids) {
if(ids == null || ids.length == 0){
return Collections.EMPTY_LIST;
}
return sessionFactory.getCurrentSession().createQuery(
"from " + clazz.getSimpleName() + " where id in(:ids)")
.setParameterList("ids", ids).list();
}
public void update(T t) {
sessionFactory.getCurrentSession().update(t);
}
/**
* @return the sessionFactory
*/
public SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* @param sessionFactory
* the sessionFactory to set
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}