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);

	}

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值