近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink。Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久化市场带来一个标准,大有统一持久化市场的气势。JPA 是通过 JDK5.0 注解或 XML 描述对象 - 关系表的映射关系,并将运行期实体对象持久化到数据库中去。JPA 规范小组的领导人就是 Hibernate 的发明者 Gavin King,JPA 规范的制定过程中大量参考了 Hibernate 的内容,所以如果一个对 Hibernate 很熟悉的人,使用起来 JPA 会是轻车熟路,驾轻就熟的,并且会感觉到更简单一些,这主要得益于 JDK5 中引入的注解(annotation)。

这里边经常会有人搞混JPA 和 Hibernate,因为JPA规范出来以前,都是直接配置Hibernate或者说直接应用的Hibernate的API,导致一些人提到JPA就直接跟Hibernate关联一块。(JAP is a dance ,Hibernate is a dancer)

看一下JPA + Hibernate的设置

  1. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  2. <property name="persistenceUnitName" value="persistence-unit" />
  3. <property name="dataSource" ref="dataSource" />
  4. <property name="jpaVendorAdapter">
  5. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  6. <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
  7. <property name="showSql" value="true" />
  8. <property name="generateDdl" value="true" />
  9. </bean>
  10. </property>
  11. </bean>
  12.  
  13. <bean id="transactionManager"
  14. class="org.springframework.orm.jpa.JpaTransactionManager">
  15. <property name="entityManagerFactory" ref="entityManagerFactory" />
  16. </bean>
  17.  
  18. <tx:annotation-driven transaction-manager="transactionManager"/>

在看一下使用,抽象出一个DAO如下

  1. public class BaseDao <T extends Serializable> {
  2.  
  3. private Class<T> clazz;
  4.  
  5. @PersistenceContext
  6. EntityManager entityManager;
  7.  
  8. public final void setClazz( Class< T > clazzToSet ){
  9. this.clazz = clazzToSet;
  10. }
  11.  
  12. public T findOne( long id ){
  13. return entityManager.find( clazz, id );
  14. }
  15. public List< T > findAll(){
  16. return entityManager.createQuery( "from " + clazz.getName() ).getResultList();
  17. }
  18.  
  19. public void create( T entity ){
  20. entityManager.persist( entity );
  21. }
  22.  
  23. public T update( T entity ){
  24. return entityManager.merge( entity );
  25. }
  26.  
  27. public void delete( T entity ){
  28. entityManager.remove( entity );
  29. }
  30. public void deleteById( long entityId ){
  31. T entity = findOne( entityId );
  32. delete( entity );
  33. }
  34. }

JpaTemplate已经在Spring 4.x中取消了,转而都是用EntityManager实现CRUD,可以参考

The DAO with JPA and Spring

Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)的更多相关文章

  1. Spring Boot + Jpa(Hibernate) 架构基本配置

    本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2 ...

  2. springmvc+spring+jpa(hibernate)+redis+maven配置

    废话不多少 项目结构 pom.xml配置例如以下 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=& ...

  3. SpringBoot + Jpa(Hibernate) 架构基本配置

    1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...

  4. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

    最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...

  5. JPA Hibernate应用实例

    1.配置文件:persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persiste ...

  6. Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...

  7. Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

      (转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题   这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...

  8. 五、spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate

    1.pom添加依赖 <!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 --> <dependency> <group ...

  9. SpringBoot之使用jpa/hibernate

    Springboot版本是2.1.3.RELEASE 1.依赖 List-1.1 <dependency> <groupId>org.springframework.boot& ...

随机推荐

  1. mysql 自定义插件调试

    # 创建表的stack frame #0: 0x000000011d11f58a ha_spartan.so`Spartan_data::create_table(this=0x00007f9fc13 ...

  2. laravel5.5首次使用php artisan migrate注意问题:

    1.在app/Providers/AppServiceProvider.php中设置字符串默认长度:(不进行这一步,执行php artisan migrate会报错,同时创建的表会有所缺失) use ...

  3. linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定

    LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: I ...

  4. 路由导航之第一个子模块(HomeModule)

    git clone git@github.com:len007/my-angular2-app.git my-angular2-app 开始 一个URL = 一个页面 = 一个Component. 我 ...

  5. echarts 图表后面背景色

    "splitArea": { "show": true, "areaStyle": { "color": [ " ...

  6. I2C 上拉电阻选择计算公式

    I2C接口上拉电阻的选择 - I2C接口上拉电阻的选择 1.I2C接口的输出端是漏极开路或集电极开路,所以必须在接口外接上拉. 2.上拉电阻的范围很宽,但也需要跟据功耗.信号上升时间等具体确定. 和速 ...

  7. xpath 在firefox,chrome中正常,在requests中不正常的解决。

    经多次测试发现: lxml中的etree格式化以后,直接使用firefox或chrome提取的xpath检索不到内容. 主要是因为tbody # 车种xpathczxx = '/html/body/t ...

  8. [Leetcode 40]组合数和II Combination Sum II

    [题目] Given a collection of candidate numbers (candidates) and a target number (target), find all uni ...

  9. TreeSet VS HashSet VS LinkedHashSet; TreeMap VS HashMap VS LinkedHashMap

    From online resources Set HashSet is much faster than TreeSet (constant-time versus log-time for mos ...

  10. ORACLE数据库管理员的职责

    ORACLE数据库管理员的职责 一.概述 ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: (1). 每天对ORACLE数据库的运行状态,日志文件,备份情况,数据库的空间使用情 ...