如何写持久层通用实现BaseDaoImpl

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37404150/article/details/85005290
package pers.dov.bos.dao.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import pers.dov.bos.dao.base.IBaseDao;

/**
 * 
 * @author Dovahkiin_
 *
 * @param <T>
 */
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T>{

	//实体类型
	private Class<T> entityClass;
	
	//使用注解方式进行依赖注入
	@Resource
	public void setMySessionFactory(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}
	
	//在构造方法中动态的获得操作的实体类型
	public BaseDaoImpl() {
		ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
		Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
		entityClass  = (Class<T>) actualTypeArguments[0];
	}
	
	@Override
	public void save(T entity) {
		this.getHibernateTemplate().save(entity);
	}

	@Override
	public void delete(T entity) {
		this.getHibernateTemplate().delete(entity);
	}

	@Override
	public void update(T entity) {
		this.getHibernateTemplate().update(entity);
	}

	@Override
	public T findById(Serializable id) {
		return this.getHibernateTemplate().get(entityClass, id);
	}

	@Override
	public List<T> findAll() {
		String hql = "FROM" + entityClass.getSimpleName();
		return this.getHibernateTemplate().find(hql);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37404150/article/details/85005290