`

DaoSupport 通用方法

    博客分类:
  • JPA
 
阅读更多

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

	}

}
 
分享到:
评论

相关推荐

    天下陶网络商城.zip

    `DaoSupport.class`可能是提供通用DAO方法的辅助类。 5. **控制层**:`StartExam.class`和`Student.class`可能是处理特定业务逻辑的Action类,`StartExam`可能与在线考试功能相关,`Student`类则可能用于管理学生...

    BBSport_java项目总结2

    具体到`BlandServiceBean`类,它继承自`DaoSupport`,实现了`BlandService`接口,提供了`save`方法,用于保存实体到数据库。此外,`BlandService`接口本身也是一个DAO接口,定义了数据访问的操作契约。 ### 视图层...

    nutMvc 最专业的讲解

    例如,通过`@DAOSupport`注解,可以创建一个基类,为所有数据访问类提供通用的方法。`@SQL`和`@ResultMap`等注解则用于指定SQL语句和结果映射。这样,开发者只需关注业务逻辑,无需关心底层的SQL执行细节。 ### ...

    java程序员面试简历&#40;列子&#41;.doc.doc

    - DaoSupport用于通用的DAO操作,封装分页功能,并使用自定义泛型。 - 文件上传下载通过IO和特定库如JSPSmartUpload、Spring的POI实现。 这份简历展示了应聘者扎实的Java Web开发基础,丰富的框架使用经验以及...

    Spring jdbc中数据库操作对象化模型的实例详解

    Spring JDBC还提供了一些更高级的查询接口,如`GenericSqlQuery`,用于通用查询;`UpdatableSqlQuery`,它可以更新结果集中的数据;`MappingSqlQueryWithParameter`则用于将结果集映射到Java对象。 - `SqlUpdate`和...

Global site tag (gtag.js) - Google Analytics