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);
}
}
分享到:
相关推荐
Java 的 DAO 工具 DaoSupport。 更多资源详见: http://blog.csdn.net/fanxiaobin577328725/article/details/51894331 (包含图书各部分和随书源码,还有其它资源的详细下载地址)
解决这个问题的方法通常是添加或更新Spring的相关依赖,确保版本正确,并且IDE或构建工具已经正确解析了这些依赖。如果以上步骤都无法解决问题,可能需要深入检查项目的具体配置或排查IDE的设置。 最后,关于标签中...
继承自`DaoSupport`的DAO类可以利用其提供的便利方法,如`getJdbcTemplate()`或`getHibernateTemplate()`,来简化数据库操作。不过,现在更推荐使用Spring Data JPA,它提供了更高级别的抽象,减少了手动编写DAO层...
扩展Format方法示例源码 源码描述: 该源码展示了新版本的string.Format() 方法,可以实现更可读格式字符串的语法。 个人喜欢string.Format (or StringBuilder.AppendFormat) 非常多。 我经常使用它,认为它是灵活的...
该类为子类提供了一个名为`hibernateTemplate`的属性,可以通过它调用一系列预定义的方法来进行数据库操作(如查询、更新等)。 - **示例代码**: ```java public class TestA extends HibernateDaoSupport { ...
`DaoSupport.class`可能是提供通用DAO方法的辅助类。 5. **控制层**:`StartExam.class`和`Student.class`可能是处理特定业务逻辑的Action类,`StartExam`可能与在线考试功能相关,`Student`类则可能用于管理学生...
具体到`BlandServiceBean`类,它继承自`DaoSupport`,实现了`BlandService`接口,提供了`save`方法,用于保存实体到数据库。此外,`BlandService`接口本身也是一个DAO接口,定义了数据访问的操作契约。 ### 视图层...
在提供的代码示例中,定义了一个名为 `DAO` 的接口,该接口提供了基本的数据访问操作方法,如保存、更新、删除、查询等。 ```java public interface DAO { public void save(Object entity); public void update...
NULL 博文链接:https://wxinpeng.iteye.com/blog/1162157
The type org.springframework.dao.support.DaoSupport cannot be resolved. 在使用 Spring 时,可能会出现 DAO 支持类型错误。解决方法是,检查应用程序的依赖项,确保 Spring 的依赖项正确,并且确保 DAO 实现...
2. **SQL语句的执行**:可能包含预编译的SQL语句(PreparedStatement)以防止SQL注入,以及执行查询、更新、删除等操作的方法。 3. **事务管理**:提供事务的开始、提交、回滚接口,确保数据操作的原子性。 4. **...
为每个数据源创建一个事务管理器,并在需要使用特定数据源的方法上添加对应的事务管理器注解。例如: ```java @Configuration @EnableTransactionManagement public class DataSourceConfig { @Primary @Bean...
public class NewsDAOBean extends DaoSupport implements NewsDAO, NewsLocalDAO { // 业务逻辑实现 } ``` 无状态会话Bean的生命周期相对简单,主要涉及“不存在”(Does Not Exist)和“可调用方法池”(Method-...
它继承自DaoSupport,为子类提供了getSqlSession()方法,用于获取SqlSession实例。这种方式下,开发者无需在每个DAO方法中手动管理SqlSession的创建和关闭,而是通过继承SqlSessionDaoSupport并重用其提供的...
例如,我们可以使用 Session 的 save()、update()、delete() 方法来保存、更新或删除数据,用 createQuery() 或 createCriteria() 来执行 HQL(Hibernate Query Language)或 Criteria 查询。 在服务层(Service)...
例如,通过`@DAOSupport`注解,可以创建一个基类,为所有数据访问类提供通用的方法。`@SQL`和`@ResultMap`等注解则用于指定SQL语句和结果映射。这样,开发者只需关注业务逻辑,无需关心底层的SQL执行细节。 ### ...
- DaoSupport用于通用的DAO操作,封装分页功能,并使用自定义泛型。 - 文件上传下载通过IO和特定库如JSPSmartUpload、Spring的POI实现。 这份简历展示了应聘者扎实的Java Web开发基础,丰富的框架使用经验以及...
在给出的代码片段中,我们看到`DaoSupport`类是整个泛型DAO层的核心。下面将详细解析其关键方法: - **构造函数**:接收`SessionFactory`和实体类`Class`对象作为参数,初始化了DAO的基本配置。 - **`getSession()...
4. **DAO层集成**:Spring的DaoSupport类提供了一些基础功能,可以帮助我们快速实现DAO层。我们可以创建一个继承自HibernateDaoSupport的抽象基类,将SessionFactory注入,然后在此基础上实现具体的DAO方法。 5. **...