package com.rlovep.dao.impl;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import com.rlovep.dao.IBaseDao;
/*
* 所有dao的通用操作,希望所有的dao都继承此类
*/
public class BaseDao<T> implements IBaseDao<T>{
//当前操作实际的bean类型
private Class<T>clazz;
//获取类名称
private String className;
// IOC容器(依赖)注入SessionFactory对象
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public BaseDao() {
Type type=this.getClass().getGenericSuperclass();
//转换为参数化类型
ParameterizedType pt=(ParameterizedType)type;// BaseDao<Employee>
//得到实际类型
Type types[]=pt.getActualTypeArguments();
//获取实际类型
clazz=(Class<T>)types[0];
className = clazz.getSimpleName();//例如:Employee
}
@Override
public void save(T obj) {
sessionFactory.getCurrentSession().save(obj);
}
@Override
public void update(T obj) {
sessionFactory.getCurrentSession().update(obj);
}
@Override
public void delete(int id) {
sessionFactory.getCurrentSession().createQuery("delete from "+className+" where id=?").setInteger(0, id).executeUpdate();
}
@Override
public T findById(int id) {
return (T)sessionFactory.getCurrentSession().get(clazz, id);
}
@Override
public List<T> getAll() {
Query query = sessionFactory.getCurrentSession().createQuery("from "+className);
List<T> list = query.list();
return list;
}
}