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

Spring+JPA整合

    博客分类:
  • SSH
阅读更多

参考: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之类的异常

 

9
0
分享到:
评论

相关推荐

    struts2+spring+jpa整合的完整例子(含分页)

    在学习jpa时候做的一个struts2+spring+jpa整合的完整例子 包含分页,一个简单的 资产入库系统 并实现了登陆等。

    Spring+Jersey+JPA+Hibernate+MySQL整合

    在本项目中,Spring被用来整合其他技术,如Jersey、JPA和Hibernate,以实现一个完整的Web服务解决方案。 Jersey是Java RESTful Web Services(RESTful API)的实现,它基于JSR 311和JSR 339标准。通过使用Jersey,...

    spring+springMVC+jpa+hibernate框架整合

    在IT领域,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+jpa+hibernate框架整合"就是一个常见的解决方案。这个整合涉及到四个关键的技术栈:Spring框架、SpringMVC、JPA(Java Persistence API)...

    jsf+spring+jpa

    4. **配置JSF/Spring/JPA整合**: - 在JSF的`faces-config.xml`文件中配置variable-resolver。 - 在Spring中集成JPA,配置LocalEntityManagerFactoryBean。 #### 六、最佳实践 - **模块化**:确保应用程序的各个...

    基于_Struts_2+Spring+JPA_框架的WEB_应用

    通过这种整合,开发者可以利用Struts 2的强大会话管理和视图渲染能力,Spring的全面服务管理,以及JPA的高效数据持久化,创建出结构清晰、易于维护的Java Web应用程序。在实际开发中,还需要注意性能优化、异常处理...

    Spring+Struts2+JPA

    **Spring+Struts2+JPA整合步骤** 1. **配置Spring**:创建Spring配置文件,定义Bean并进行依赖注入,包括Struts2的Action类、Service层和DAO层。 2. **配置Struts2**:添加Struts2的库依赖,编写struts.xml配置...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

    在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...

    Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例.zip

    在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...

    SpringMVC+Spring+SpringDataJPA+Hibernate整合登录的效果

    这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...

    springmvc+jpa(hibernate实现)+spring整合实例

    工作用了springmvc+jpa+spring这么长时间,这段时间正好有点时间就想整合一下,但在整合过程中遇到了各种问题,上网查了很多资料但讲的都很模糊或者是没有注释,在我一步一步的试验中终于整合成功了,做为我自已以后...

    Struts+Spring+Jpa(hibernate)整合

    "Struts+Spring+Jpa(hibernate)整合"这个主题意味着我们要将这三个框架进行集成,以实现更强大的功能。在实际项目中,这种整合能够帮助开发者更好地管理业务逻辑、持久化数据以及处理用户请求。 1. **Struts**:...

    Struct + spring + jpa

    在实际应用中,`Struct + Spring + JPA` 的整合通常涉及到以下几个步骤: 1. **设置项目结构**:创建Maven或Gradle项目,添加相应的依赖库。 2. **配置Struts**:编写struts.xml配置文件,定义Action类和Action ...

    spring struct + jpa

    **Spring Structs + JPA整合** 将Spring Structs与JPA结合使用,可以在Spring MVC的控制器中方便地进行数据库操作。Spring Data JPA是Spring Framework的一个子项目,它提供了对JPA的高级支持,简化了数据访问层的...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    6. **security-jpa**:此文件名可能是某个模块或者配置文件,可能包含了与SpringSecurity和JPA整合的具体实现,比如用户Repository、安全配置类等。在项目中,它可能负责定义如何使用JPA来操作用户角色和权限数据,...

    Spring+JPA(hibernate)整合 一对多及继承关系配置

    NULL 博文链接:https://prowl.iteye.com/blog/519618

    SpringBoot+JPA

    本文将详细介绍如何在SpringBoot项目中整合SpringDataJPA,以及其带来的诸多优势。 1. **SpringBoot简介** SpringBoot旨在简化Spring应用的初始搭建以及开发过程。通过提供“开箱即用”的功能,如内嵌Tomcat服务器...

    spring boot+jpa+sqlserver+bootstrap

    【标题】"Spring Boot + JPA + SQL Server + Bootstrap 整合应用" 【知识点详解】 在现代Web开发中,Spring Boot、JPA、SQL Server和Bootstrap是四个非常关键的技术组件,它们共同构建了一个高效、易用且功能强大...

    struts2.0+spring2.5+JPA整合框架

    在整合Struts2、Spring和JPA时,通常需要以下步骤: 1. 配置Struts2:在web.xml中配置Struts2的前端控制器DispatcherServlet,以及struts-default和struts-plugin.xml配置。 2. 配置Spring:创建ApplicationContext....

    spring+jpa+全局异常+单元测试

    Spring Data JPA是Spring框架的一个子项目,它简化了与JPA的集成,提供了更高级别的抽象,使得数据库操作更加便捷。 全局异常处理是任何应用都应该具备的重要特性,它可以统一捕获和处理程序中可能出现的异常,避免...

Global site tag (gtag.js) - Google Analytics