`

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

	}

}
 
分享到:
评论

相关推荐

    DaoSupport

    Java 的 DAO 工具 DaoSupport。 更多资源详见: http://blog.csdn.net/fanxiaobin577328725/article/details/51894331 (包含图书各部分和随书源码,还有其它资源的详细下载地址)

    解决The type org.springframework.dao.support.DaoSupport cannot be resolved.bao报错

    解决这个问题的方法通常是添加或更新Spring的相关依赖,确保版本正确,并且IDE或构建工具已经正确解析了这些依赖。如果以上步骤都无法解决问题,可能需要深入检查项目的具体配置或排查IDE的设置。 最后,关于标签中...

    JPA(hibernate) Dao 和 DaoSupport

    继承自`DaoSupport`的DAO类可以利用其提供的便利方法,如`getJdbcTemplate()`或`getHibernateTemplate()`,来简化数据库操作。不过,现在更推荐使用Spring Data JPA,它提供了更高级别的抽象,减少了手动编写DAO层...

    扩展Format方法示例源码20130722

    扩展Format方法示例源码 源码描述: 该源码展示了新版本的string.Format() 方法,可以实现更可读格式字符串的语法。 个人喜欢string.Format (or StringBuilder.AppendFormat) 非常多。 我经常使用它,认为它是灵活的...

    HibernateDaoSupport与JdbcDaoSupport

    该类为子类提供了一个名为`hibernateTemplate`的属性,可以通过它调用一系列预定义的方法来进行数据库操作(如查询、更新等)。 - **示例代码**: ```java public class TestA extends HibernateDaoSupport { ...

    天下陶网络商城.zip

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

    BBSport_java项目总结2

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

    BBSport_java项目总结4

    在提供的代码示例中,定义了一个名为 `DAO` 的接口,该接口提供了基本的数据访问操作方法,如保存、更新、删除、查询等。 ```java public interface DAO { public void save(Object entity); public void update...

    重写Spring的HibernateDaoSupport 简化Dao层写法

    NULL 博文链接:https://wxinpeng.iteye.com/blog/1162157

    spring 问题总结实用知识库分享知识分享

    The type org.springframework.dao.support.DaoSupport cannot be resolved. 在使用 Spring 时,可能会出现 DAO 支持类型错误。解决方法是,检查应用程序的依赖项,确保 Spring 的依赖项正确,并且确保 DAO 实现...

    09年的自己比较满意的三件作品

    2. **SQL语句的执行**:可能包含预编译的SQL语句(PreparedStatement)以防止SQL注入,以及执行查询、更新、删除等操作的方法。 3. **事务管理**:提供事务的开始、提交、回滚接口,确保数据操作的原子性。 4. **...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    为每个数据源创建一个事务管理器,并在需要使用特定数据源的方法上添加对应的事务管理器注解。例如: ```java @Configuration @EnableTransactionManagement public class DataSourceConfig { @Primary @Bean...

    EJB3.0简介

    public class NewsDAOBean extends DaoSupport implements NewsDAO, NewsLocalDAO { // 业务逻辑实现 } ``` 无状态会话Bean的生命周期相对简单,主要涉及“不存在”(Does Not Exist)和“可调用方法池”(Method-...

    使用mybatis进行数据处理的四种方式

    它继承自DaoSupport,为子类提供了getSqlSession()方法,用于获取SqlSession实例。这种方式下,开发者无需在每个DAO方法中手动管理SqlSession的创建和关闭,而是通过继承SqlSessionDaoSupport并重用其提供的...

    spring+hibernate示例

    例如,我们可以使用 Session 的 save()、update()、delete() 方法来保存、更新或删除数据,用 createQuery() 或 createCriteria() 来执行 HQL(Hibernate Query Language)或 Criteria 查询。 在服务层(Service)...

    nutMvc 最专业的讲解

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

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

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

    经典泛型dao层代码,非常好用简易

    在给出的代码片段中,我们看到`DaoSupport`类是整个泛型DAO层的核心。下面将详细解析其关键方法: - **构造函数**:接收`SessionFactory`和实体类`Class`对象作为参数,初始化了DAO的基本配置。 - **`getSession()...

    spring和hibernate整合

    4. **DAO层集成**:Spring的DaoSupport类提供了一些基础功能,可以帮助我们快速实现DAO层。我们可以创建一个继承自HibernateDaoSupport的抽象基类,将SessionFactory注入,然后在此基础上实现具体的DAO方法。 5. **...

Global site tag (gtag.js) - Google Analytics