参考:Spring Recipes
1. 涉及内容:
* 在Spring中配置JPA EntityManagerFactory
* 配置注解声明式事务
* 用JPA的上下文注入持久化对象
2. 实现步骤:
0).依赖包:hibernate-annotations-3.4.0.GA
hibernate-entitymanager-3.4.0.GA
spring-framework-2.5.6
1).编写Course实体类并添加JPA注解,代码如下:
package com.local.domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_course")
public class Course {
@Id
@GeneratedValue
private Long id;
private String title;
private Date beginDate;
private Date endDate;
private int fee;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getBeginDate() {
return beginDate;
}
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public int getFee() {
return fee;
}
public void setFee(int fee) {
this.fee = fee;
}
}
2)编写CourseDao接口和JpaCourseDao实现,代码如下:
package com.local.dao;
import com.local.domain.Course;
public interface CourseDao {
public void save(Course course);
public void delete(Long id);
public Course get(Long id);
}
package com.local.dao.impl;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.HibernateException;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.local.dao.CourseDao;
import com.local.domain.Course;
@Repository("courseDao")
public class JpaCourseDao implements CourseDao{
@PersistenceContext
private EntityManager manager;
public JpaCourseDao(){
}
@Override
@Transactional
public void delete(Long id) {
Course course=manager.find(Course.class, id);
manager.remove(course);
}
@Override
public Course get(Long id) {
return manager.find(Course.class, id);
}
@Override
@Transactional
public void save(Course course) {
manager.merge(course);
}
}
3)在classpath根部的META-INF目录下创建persistence.xml文件,代码如下:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="course">
<persistence-unit>
</persistence>
4)配置spring配置文件
(1)打开注解支持
(2)开启组件扫描
(3)配置数据源:
编辑jdbc.properties文件,配置连接属性
(4)配置实体管理工厂
(5)配置事务管理器,并打开注解事务
(6)注册PersistenceExceptionTranslationPostProcessor,
实现JPA原生API抛出的异常到spring的DataAccessException层次结构的转换
applicationContext.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd ">
<context:annotation-config/>
<context:component-scan base-package="com.local"/>
<tx:annotation-driven/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="initialSize" value="${initialSize}" />
<property name="maxActive" value="${maxActive}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="minIdle" value="${minIdle}" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="course"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"></property>
<property name="showSql" value="true"/>
<property name="generateDdl" value="true"/>
</bean>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!-- 将加有Repository注解的使用JPA或者Hibernate原生API的方法所抛出的异常转化为Spring的DataAccessException中的异常 -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"></bean>
</beans>
jdbc.properties属性文件内容如下:
driverClassName=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/db_jpa?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=root
initialSize=1
maxActive=500
maxIdle=2
minIdle=1
5)编写Junit测试:
package com.local.dao.impl;
import java.util.Date;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.local.dao.CourseDao;
import com.local.domain.Course;
public class CourseDaoImplTest {
private static ApplicationContext ctx;
private static CourseDao courseDao;
@BeforeClass
public static void init(){
ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
courseDao=(CourseDao)ctx.getBean("courseDao");
}
@Test
public void testSave(){
Course course=new Course();
course.setTitle("course2");
course.setBeginDate(new Date());
course.setEndDate(new Date());
course.setFee(100);
courseDao.save(course);
}
@Test
public void testGet(){
Course course=courseDao.get(new Long(3));
System.out.println("title: "+course.getTitle());
System.out.println("beginDate: "+course.getBeginDate());
System.out.println("endDate: "+course.getEndDate());
System.out.println("fee: "+course.getFee());
}
}
3. 其他说明:
*1. @PersistenceContext注解:
给加该注解的属性注入实体管理器
*2. @PersistenceUnit注解:
注入实体管理器工厂
*3. 在Spring配置文件中加入了JPA的连接,在persistence.xml中不需配置了,否则会出现
java.lang.UnsupportedOperationException: Not supported by BasicDataSource之类的异常
分享到:
相关推荐
在学习jpa时候做的一个struts2+spring+jpa整合的完整例子 包含分页,一个简单的 资产入库系统 并实现了登陆等。
在本项目中,Spring被用来整合其他技术,如Jersey、JPA和Hibernate,以实现一个完整的Web服务解决方案。 Jersey是Java RESTful Web Services(RESTful API)的实现,它基于JSR 311和JSR 339标准。通过使用Jersey,...
在IT领域,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+jpa+hibernate框架整合"就是一个常见的解决方案。这个整合涉及到四个关键的技术栈:Spring框架、SpringMVC、JPA(Java Persistence API)...
4. **配置JSF/Spring/JPA整合**: - 在JSF的`faces-config.xml`文件中配置variable-resolver。 - 在Spring中集成JPA,配置LocalEntityManagerFactoryBean。 #### 六、最佳实践 - **模块化**:确保应用程序的各个...
通过这种整合,开发者可以利用Struts 2的强大会话管理和视图渲染能力,Spring的全面服务管理,以及JPA的高效数据持久化,创建出结构清晰、易于维护的Java Web应用程序。在实际开发中,还需要注意性能优化、异常处理...
**Spring+Struts2+JPA整合步骤** 1. **配置Spring**:创建Spring配置文件,定义Bean并进行依赖注入,包括Struts2的Action类、Service层和DAO层。 2. **配置Struts2**:添加Struts2的库依赖,编写struts.xml配置...
在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...
在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...
这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...
工作用了springmvc+jpa+spring这么长时间,这段时间正好有点时间就想整合一下,但在整合过程中遇到了各种问题,上网查了很多资料但讲的都很模糊或者是没有注释,在我一步一步的试验中终于整合成功了,做为我自已以后...
"Struts+Spring+Jpa(hibernate)整合"这个主题意味着我们要将这三个框架进行集成,以实现更强大的功能。在实际项目中,这种整合能够帮助开发者更好地管理业务逻辑、持久化数据以及处理用户请求。 1. **Struts**:...
在实际应用中,`Struct + Spring + JPA` 的整合通常涉及到以下几个步骤: 1. **设置项目结构**:创建Maven或Gradle项目,添加相应的依赖库。 2. **配置Struts**:编写struts.xml配置文件,定义Action类和Action ...
**Spring Structs + JPA整合** 将Spring Structs与JPA结合使用,可以在Spring MVC的控制器中方便地进行数据库操作。Spring Data JPA是Spring Framework的一个子项目,它提供了对JPA的高级支持,简化了数据访问层的...
6. **security-jpa**:此文件名可能是某个模块或者配置文件,可能包含了与SpringSecurity和JPA整合的具体实现,比如用户Repository、安全配置类等。在项目中,它可能负责定义如何使用JPA来操作用户角色和权限数据,...
NULL 博文链接:https://prowl.iteye.com/blog/519618
本文将详细介绍如何在SpringBoot项目中整合SpringDataJPA,以及其带来的诸多优势。 1. **SpringBoot简介** SpringBoot旨在简化Spring应用的初始搭建以及开发过程。通过提供“开箱即用”的功能,如内嵌Tomcat服务器...
【标题】"Spring Boot + JPA + SQL Server + Bootstrap 整合应用" 【知识点详解】 在现代Web开发中,Spring Boot、JPA、SQL Server和Bootstrap是四个非常关键的技术组件,它们共同构建了一个高效、易用且功能强大...
在整合Struts2、Spring和JPA时,通常需要以下步骤: 1. 配置Struts2:在web.xml中配置Struts2的前端控制器DispatcherServlet,以及struts-default和struts-plugin.xml配置。 2. 配置Spring:创建ApplicationContext....
Spring Data JPA是Spring框架的一个子项目,它简化了与JPA的集成,提供了更高级别的抽象,使得数据库操作更加便捷。 全局异常处理是任何应用都应该具备的重要特性,它可以统一捕获和处理程序中可能出现的异常,避免...