使用Spring框架写JPA程序
2016-03-08 16:25
351 查看
1.不建议使用Spring的Support类。
虽然Spring提供JpaTemplate类和JpaDaoSupport类,还是建议使用DI的方式注入EntityManager。例子如下:
@PersistenceContext
private
EntityManager em;
另外需要在XML里面注册2个bean。
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
</bean>
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor">
</bean>
摘录JavaDoc里的相关描述:
NOTE: JpaTemplate mainly exists as a sibling of JdoTemplate and HibernateTemplate, offering the same style for people used to it. For newly started projects, consider adopting the standard JPA style of coding data access objects instead, based on a "shared
EntityManager" reference injected via a Spring bean definition or the JPA PersistenceContext annotation. (Using Spring's SharedEntityManagerBean
/ PersistenceAnnotationBeanPostProcessor,
or using a direct JNDI lookup for an EntityManager on a Java EE 5 server.)
2.EntityManagerFactory相关的XML定义
<bean
id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property
name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property
name="url"
value="jdbc:mysql://localhost:3306/SpringStudy">
</property>
<property
name="username" value="root"></property>
<property
name="password" value="pwd"></property>
</bean>
<bean
id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property
name="dataSource" ref="dataSource"></property>
<property
name="jpaVendorAdapter" ref="jpaVendorAdapter"></property>
</bean>
<bean
id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property
name="database" value="MYSQL"></property>
<property
name="showSql" value="true"></property>
<property
name="generateDdl" value="false"></property>
<property
name="databasePlatform"
value="org.hibernate.dialect.MySQL5Dialect">
</property>
</bean>
3.JpaTransactionManager相关的XML定义,其中会引用到上面定义的EntityManagerFactory。
<bean
id="jpaDialect"
class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
</bean>
<bean
id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property
name="entityManagerFactory" ref="emf"></property>
<property
name="jpaDialect" ref="jpaDialect"></property>
</bean>
<tx:annotation-driven
transaction-manager="transactionManager" />
通过上面的定义在BeanClass里面通过@Transactional注解就可以引入事物管理功能。
4.基于注解的autowire
<context:annotation-config></context:annotation-config>
通过上面的定义就可以实现@Autowired注解标记对象的自动注入。@Autowired是ByType注入。如果需要ByName注入可以使用@Resource注解。使用上面的定义方式被注入的bean还是需要通过XML的方式注册的。如果连bean的注册都希望通过注解的方式完成的话,使用下面的定义方式来替代。
<context:component-scan
base-package="xxx.package.name"></context:component-scan>
相关package下
虽然Spring提供JpaTemplate类和JpaDaoSupport类,还是建议使用DI的方式注入EntityManager。例子如下:
@PersistenceContext
private
EntityManager em;
另外需要在XML里面注册2个bean。
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
</bean>
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor">
</bean>
摘录JavaDoc里的相关描述:
NOTE: JpaTemplate mainly exists as a sibling of JdoTemplate and HibernateTemplate, offering the same style for people used to it. For newly started projects, consider adopting the standard JPA style of coding data access objects instead, based on a "shared
EntityManager" reference injected via a Spring bean definition or the JPA PersistenceContext annotation. (Using Spring's SharedEntityManagerBean
/ PersistenceAnnotationBeanPostProcessor,
or using a direct JNDI lookup for an EntityManager on a Java EE 5 server.)
2.EntityManagerFactory相关的XML定义
<bean
id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property
name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property
name="url"
value="jdbc:mysql://localhost:3306/SpringStudy">
</property>
<property
name="username" value="root"></property>
<property
name="password" value="pwd"></property>
</bean>
<bean
id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property
name="dataSource" ref="dataSource"></property>
<property
name="jpaVendorAdapter" ref="jpaVendorAdapter"></property>
</bean>
<bean
id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property
name="database" value="MYSQL"></property>
<property
name="showSql" value="true"></property>
<property
name="generateDdl" value="false"></property>
<property
name="databasePlatform"
value="org.hibernate.dialect.MySQL5Dialect">
</property>
</bean>
3.JpaTransactionManager相关的XML定义,其中会引用到上面定义的EntityManagerFactory。
<bean
id="jpaDialect"
class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
</bean>
<bean
id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property
name="entityManagerFactory" ref="emf"></property>
<property
name="jpaDialect" ref="jpaDialect"></property>
</bean>
<tx:annotation-driven
transaction-manager="transactionManager" />
通过上面的定义在BeanClass里面通过@Transactional注解就可以引入事物管理功能。
4.基于注解的autowire
<context:annotation-config></context:annotation-config>
通过上面的定义就可以实现@Autowired注解标记对象的自动注入。@Autowired是ByType注入。如果需要ByName注入可以使用@Resource注解。使用上面的定义方式被注入的bean还是需要通过XML的方式注册的。如果连bean的注册都希望通过注解的方式完成的话,使用下面的定义方式来替代。
<context:component-scan
base-package="xxx.package.name"></context:component-scan>
相关package下
被@Component,
@Service,
@Controller,
@Repository之中的任何一个注解标记的Class都会被自动注册成Bean。
相关文章推荐
- Java中IO流操作大全
- 初识JAVA中的泛型概念
- SpringMVC+Hibernate4+Spring3整合开发实现CRUD
- JVM学习之java垃圾回收机制
- Exercise thinking in java
- springmvc学习笔记(1)-框架原理和入门配置
- java并发编程:线程安全管理类--原子操作类--AtomicInteger
- struts2工作原理
- java EE ME SE有什么关系
- Java 垃圾回收机制
- JAVA并发学习之基础概念
- 《netty权威指南》私有协议栈开发中遇到的坑
- JAVA_检测字符串是不是一串数字的几个方法
- JAVA并发学习之volatile
- Shiro系列之Shiro+Spring MVC整合(Integration)
- Hadoop-格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
- JAVA并发学习之ThreadLocal
- 二叉搜索树的后序遍历序列Java
- Java IO体系
- 跟着项目学javaweb(std):1(整体结构)