Hibernate 泛型Dao实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate 泛型Dao实现相关的知识,希望对你有一定的参考价值。
package com.esailcar.finance.common.persistence; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.sql.SQLException; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.springframework.beans.factory.annotation.Autowired; public class MyHibernateDao<T,P extends Serializable> { private Class<T> entityClass; //可以整合到Spring中,直接用Autowired注解,不需要在构造函数生成 private SessionFactory sessionFactory; @SuppressWarnings("deprecation") public MyHibernateDao() { this.entityClass=getTClass(); Configuration config=new Configuration().configure("hibernate-cfg.xml"); this.sessionFactory=config.buildSessionFactory(); } public void save(final T entity) { getSession().saveOrUpdate(entity); } public T getById(final P id) { return (T) getSession().get(entityClass, id); } public List<T> getByHql(String queryString)throws SQLException{ return getSession().createQuery(queryString).list(); } private Session getSession() { return sessionFactory.getCurrentSession(); } private Class<T> getTClass() { //获取直接超类的 Type 实例 Type superClassType=getClass().getGenericSuperclass(); try { if(superClassType instanceof ParameterizedType) { //参数化类型 ParameterizedType parameterType=(ParameterizedType) superClassType; //泛型参数的 Type 对象的数组 Type[] parameters=parameterType.getActualTypeArguments(); //返回实体类参数 return (Class<T>)parameters[0]; } } catch(Exception e) { System.out.println(e.getMessage()); } return null; } }
以上是关于Hibernate 泛型Dao实现的主要内容,如果未能解决你的问题,请参考以下文章