package com.dao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public class BaseDao<T> {
@PersistenceContext
private EntityManager em;
public void persist(T t) {
em.persist(t);
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public T save(T t) {
return em.merge(t);
}
public void delete(T t){
em.remove(t);
}
@Transactional(readOnly=true,isolation=Isolation.READ_COMMITTED)
public T find(Class<T> clazz,Serializable id){
return em.getReference(clazz, id);
}
@SuppressWarnings("unchecked")
public List<T> find(String jpql){
return em.createQuery(jpql).getResultList();
}
@SuppressWarnings("unchecked")
public List<T> find(String jpql,Object param){
return em.createQuery(jpql).setParameter(1, param).getResultList();
}
@SuppressWarnings("unchecked")
public List<T> find(String jpql,Object[] param){
Query query=em.createQuery(jpql);
for(int i=1;i<=param.length;i++){
query.setParameter(i, param[i-1]);
}
return query.getResultList();
}
public int findTotalCount(String jpql){
return ((Long)em.createQuery(jpql).getSingleResult()).intValue();
}
}
相关推荐
总的来说,Java泛型BaseDao与BaseService是企业级Java开发中的重要概念,它们结合了泛型的优势,为数据访问和业务处理提供了灵活、安全的抽象基础。理解并熟练运用这些技术,将使你的Java开发能力更上一层楼。
1. 泛型BaseDAO:`GenericBaseDao.java`和`GenericBaseDaoInter.java` 泛型BaseDAO的主要目的是为各种实体类提供一个通用的数据访问接口。`GenericBaseDao.java`实现了`GenericBaseDaoInter.java`接口。通过定义泛型...
综上所述,这个项目展示了如何利用Java的泛型和反射技术实现一个通用的DAO,使得数据库操作更加灵活和易于维护。泛型确保了类型安全,而反射则提供了运行时的动态行为。这种设计模式在实际开发中非常常见,尤其是在...
Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...
在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...
"SpringBoot_BaseDao.zip"这个压缩包文件显然与SpringBoot相关的数据库操作有关,特别是关于BaseDao的基础使用和实现。在Java开发中,Dao(Data Access Object)层是负责处理数据访问的,通常用于与数据库进行交互。...
总的来说,BaseDao和BaseDaoImpl的设计模式结合了Java的泛型和反射特性,有效地减少了代码量,提高了开发效率,同时保持了代码的灵活性和可扩展性。它们为基于Hibernate的项目提供了强大的数据库操作支持,使得...
SSH框架是Java开发中常用的三大...通过这个示例,开发者可以学习到如何在SSH框架下实现高效的分页查询,并利用泛型提高代码的可维护性和可扩展性。对于初学者,这是一个很好的实践项目,有助于理解和掌握这些核心技术。
在`BaseDao`的实现中,这些方法会利用Hibernate的Session和Transaction接口来完成实际的数据库交互。`Session`是Hibernate的主要工作单元,它可以代表一次数据库连接或者一个单位的工作。`Transaction`则用于管理...
接着,为了实现泛型Dao,我们需要定义一个基础的Dao接口,该接口扩展自ORMLite提供的`BaseDao, ID>`接口。`T`代表我们要操作的数据实体类,`ID`代表主键类型。例如: ```java public interface GenericDao, ID> ...
在这个特定的场景中,`BaseDao` 类使用Java反射来创建通用的数据库查询方法,实现了对数据库的动态操作,从而避免了为每个表或查询编写单独的DAO(数据访问对象)方法。 1. **反射的基本概念**: - `java.lang....
- **泛型使用**:为了增强类型安全和减少代码冗余,万能DAO可能使用Java泛型,允许开发者指定操作的数据实体类型。 - **动态SQL**:使用如MyBatis或JPA等框架,允许动态生成针对不同数据库的SQL语句,以实现数据库...
其中,com.jb.arklis.app.DemoApplication类利用反射技术可以观察任何非静态类(比如java.lang.String, javax.swing.JFrame等类和自定义的类,比如com.jb.arklis.dao.BaseDAO)的普通方法、构造方法以公有属性,是一...
综上所述,这个SSH2全注解整合项目展示了如何利用现代Java Web技术栈简化开发过程,提高开发效率。通过注解的使用,开发者可以专注于业务逻辑,而非繁琐的配置,从而提升项目的可维护性和可扩展性。项目的压缩包中...
3. **使用泛型**:在DAO接口和实现类中使用泛型,可以提高代码的复用性,避免类型转换的麻烦。例如,定义一个通用的BaseDAO接口,包含通用的CRUD方法,然后根据具体的数据实体创建继承自BaseDAO的特定DAO类。 4. **...
其中,com.jb.arklis.app.DemoApplication类利用反射技术可以观察任何非静态类(比如java.lang.String, javax.swing.JFrame等类和自定义的类,比如com.jb.arklis.dao.BaseDAO)的普通方法、构造方法以公有属性,是一...
在这个例子中,`BaseDao`是一个抽象基类,它使用了泛型T来表示任何类型的实体。构造函数接收实体类的Class对象,用于获取表名。`insert()`方法使用反射调用`execute()`方法执行SQL,这里省略了具体的JDBC操作细节,...
在具体实现通用DAO时,我们通常会有一个抽象的DAO父类,比如`BaseDao<T>`,其中T代表泛型,表示任何实体类型。然后,针对每种实体类,我们可以创建一个继承自`BaseDao`的子类,如`UserDao extends BaseDao<User>`,...
2. **实现接口**:接着,创建一个实现该接口的类,如`HibernateDaoImpl<T>`,并利用Hibernate的Session接口来完成实际的数据库操作。这里需要注入SessionFactory实例,通常通过Spring框架的依赖注入实现。 3. **...
- `BaseDao` 是一个泛型接口,其中定义了通用的CRUD操作方法。 #### 三、实体类注解详解 - **@Entity**:用于标记一个Java类作为JPA的实体,该类将映射到数据库表。 - **@Table**:指定实体类映射到的具体数据库...