`
zhaoshuai_Java
  • 浏览: 2997 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用java 泛型实现BaseDao

 
阅读更多

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泛型BaseDao与BaseService是企业级Java开发中的重要概念,它们结合了泛型的优势,为数据访问和业务处理提供了灵活、安全的抽象基础。理解并熟练运用这些技术,将使你的Java开发能力更上一层楼。

    hibernate basedao(泛型版本)

    1. 泛型BaseDAO:`GenericBaseDao.java`和`GenericBaseDaoInter.java` 泛型BaseDAO的主要目的是为各种实体类提供一个通用的数据访问接口。`GenericBaseDao.java`实现了`GenericBaseDaoInter.java`接口。通过定义泛型...

    java 基于泛型与反射的通用 DAO

    综上所述,这个项目展示了如何利用Java的泛型和反射技术实现一个通用的DAO,使得数据库操作更加灵活和易于维护。泛型确保了类型安全,而反射则提供了运行时的动态行为。这种设计模式在实际开发中非常常见,尤其是在...

    Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例 Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可...

    基于泛型反射的数据层封装+MSSQLJDBC3.0驱动

    在这个特定的案例中,"基于泛型反射的数据层封装"是利用了Java的泛型和反射特性来实现这一目标。泛型提供了一种在编译时类型安全的方式,允许我们创建可以处理多种类型的类、接口和方法。而反射则是Java提供的一种...

    SpringBoot_BaseDao.zip

    "SpringBoot_BaseDao.zip"这个压缩包文件显然与SpringBoot相关的数据库操作有关,特别是关于BaseDao的基础使用和实现。在Java开发中,Dao(Data Access Object)层是负责处理数据访问的,通常用于与数据库进行交互。...

    baseDao及baseDaoImpl将hibernate里面的方法进行合理的封装,使用到java的反射技术

    总的来说,BaseDao和BaseDaoImpl的设计模式结合了Java的泛型和反射特性,有效地减少了代码量,提高了开发效率,同时保持了代码的灵活性和可扩展性。它们为基于Hibernate的项目提供了强大的数据库操作支持,使得...

    SSH 泛型DAO分页

    SSH框架是Java开发中常用的三大...通过这个示例,开发者可以学习到如何在SSH框架下实现高效的分页查询,并利用泛型提高代码的可维护性和可扩展性。对于初学者,这是一个很好的实践项目,有助于理解和掌握这些核心技术。

    Hibernate底层数据库操作函数BaseDao+具体实例

    在`BaseDao`的实现中,这些方法会利用Hibernate的Session和Transaction接口来完成实际的数据库交互。`Session`是Hibernate的主要工作单元,它可以代表一次数据库连接或者一个单位的工作。`Transaction`则用于管理...

    Android 使用ORMLite打造万能泛型Dao简化数据持久化层

    接着,为了实现泛型Dao,我们需要定义一个基础的Dao接口,该接口扩展自ORMLite提供的`BaseDao, ID&gt;`接口。`T`代表我们要操作的数据实体类,`ID`代表主键类型。例如: ```java public interface GenericDao, ID&gt; ...

    利用java反射创建通用的数据库查询方法.pdf

    在这个特定的场景中,`BaseDao` 类使用Java反射来创建通用的数据库查询方法,实现了对数据库的动态操作,从而避免了为每个表或查询编写单独的DAO(数据访问对象)方法。 1. **反射的基本概念**: - `java.lang....

    万能javaDAO

    - **泛型使用**:为了增强类型安全和减少代码冗余,万能DAO可能使用Java泛型,允许开发者指定操作的数据实体类型。 - **动态SQL**:使用如MyBatis或JPA等框架,允许动态生成针对不同数据库的SQL语句,以实现数据库...

    Java反射技术的一般应用

    其中,com.jb.arklis.app.DemoApplication类利用反射技术可以观察任何非静态类(比如java.lang.String, javax.swing.JFrame等类和自定义的类,比如com.jb.arklis.dao.BaseDAO)的普通方法、构造方法以公有属性,是一...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    综上所述,这个SSH2全注解整合项目展示了如何利用现代Java Web技术栈简化开发过程,提高开发效率。通过注解的使用,开发者可以专注于业务逻辑,而非繁琐的配置,从而提升项目的可维护性和可扩展性。项目的压缩包中...

    java减少数据访问层代码

    3. **使用泛型**:在DAO接口和实现类中使用泛型,可以提高代码的复用性,避免类型转换的麻烦。例如,定义一个通用的BaseDAO接口,包含通用的CRUD方法,然后根据具体的数据实体创建继承自BaseDAO的特定DAO类。 4. **...

    Java反射技术的一般应用(放低分数供大家学习)

    其中,com.jb.arklis.app.DemoApplication类利用反射技术可以观察任何非静态类(比如java.lang.String, javax.swing.JFrame等类和自定义的类,比如com.jb.arklis.dao.BaseDAO)的普通方法、构造方法以公有属性,是一...

    自定义Dao,反射实现

    在这个例子中,`BaseDao`是一个抽象基类,它使用了泛型T来表示任何类型的实体。构造函数接收实体类的Class对象,用于获取表名。`insert()`方法使用反射调用`execute()`方法执行SQL,这里省略了具体的JDBC操作细节,...

    基于注解ssh的通用dao的crud

    在具体实现通用DAO时,我们通常会有一个抽象的DAO父类,比如`BaseDao&lt;T&gt;`,其中T代表泛型,表示任何实体类型。然后,针对每种实体类,我们可以创建一个继承自`BaseDao`的子类,如`UserDao extends BaseDao&lt;User&gt;`,...

    Hibernate的通用dao

    2. **实现接口**:接着,创建一个实现该接口的类,如`HibernateDaoImpl&lt;T&gt;`,并利用Hibernate的Session接口来完成实际的数据库操作。这里需要注入SessionFactory实例,通常通过Spring框架的依赖注入实现。 3. **...

    Spring-Data-JPA快速使用

    - `BaseDao` 是一个泛型接口,其中定义了通用的CRUD操作方法。 #### 三、实体类注解详解 - **@Entity**:用于标记一个Java类作为JPA的实体,该类将映射到数据库表。 - **@Table**:指定实体类映射到的具体数据库...

Global site tag (gtag.js) - Google Analytics