读书人

DaoSupport 通用步骤

发布时间: 2012-06-30 17:20:12 作者: rapoo

DaoSupport 通用方法

package com.hunqing.common.framework.dao;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import javax.persistence.Entity;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.hunqing.common.reflex.GenericsUtils;@SuppressWarnings("unchecked")@Transactional   //在本类里面加上事物处理public abstract class DaoSupport<T> implements Dao<T> {@PersistenceContext EntityManager em;//protected Class<T> entityClass=getEntityClass();  //获取实体类protected Class<T> entityClass=GenericsUtils.getSuperClassGenricType(getClass());public QueryResult<T> getScrollData(int firstResult,int maxResult){String entityName=getEntityName(entityClass);Query query=em.createQuery("select o from "+entityName+" o");query.setFirstResult(firstResult).setMaxResults(maxResult);     //limit 0,10 从0开始取10条QueryResult<T> qr= new QueryResult<T>();qr.setResultList(query.getResultList());query= em.createQuery("select count(o) from "+entityName+" o");  //获取记录总数qr.setRecordtotal((Long)query.getSingleResult());return qr;} //public String getEntityName(){     //取得实体名称//String entityName=this.entityClass.getSimpleName();//Entity entity=this.entityClass.getAnnotation(Entity.class);//if(entity.name() !=null&& !"".equals(entity.name())) entityName=entity.name();//return entityName;//}//上面的方法试直接获取,下面这个是通过传参数来获取,并声明为静态方法//protected  static <T> String getEntityName(Class<T> entityClass){     //取得实体名称public <E> String getEntityName(Class<E> entityClass){String entityName=entityClass.getSimpleName();Entity entity=entityClass.getAnnotation(Entity.class);if(entity.name() !=null&& !"".equals(entity.name())) entityName=entity.name();return entityName;}//public Class<T> getEntityClass(){//Type parentType=getClass().getGenericSuperclass();  //取得支持泛型的父类//if (parentType instanceof ParameterizedType){  //所有的泛型都实现了ParameterizedType 这个接口(判断当前类是否支持泛型)//ParameterizedType ptype=(ParameterizedType)parentType;  //转换为泛型接口用于获取泛型里面的实际接收类型// return (Class<T>)ptype.getActualTypeArguments()[0];//获取真实的类型参数,可以定义多个<T,M...>,当前只有一个//}//return null;//}public void deleteOne(Serializable entityId) {em.remove(em.getReference(entityClass, entityId));}@Transactional(propagation=Propagation.NOT_SUPPORTED)    //查询不需要添加事务处理public T find(Serializable entityId) {return  em.find(entityClass, entityId);}@Transactional(propagation=Propagation.NOT_SUPPORTED)    //查询不需要添加事务处理public long getCount() {return (Long)em.createQuery("select count(o) from "+getEntityName(this.entityClass)+" o ").getSingleResult();}public void save(T entity) {em.persist(entity);}public void update(T entity) {em.merge(entity);}}
?

读书人网 >操作系统

热点推荐