JPA整合Spring案例
Spring-SpringMVC-JPA整合案例
author :SimpleWu
time :2018-10-05 16:29
三种整合方式
1)LocalEntityManagerFactoryBean:
适用于那些仅使用 JPA 进行数据访问的项目,该 FactoryBean 将根据JPA PersistenceProvider 自动检测配置文件进行工作,一般从“META-INF/persistence.xml”读取配置信息,这种方式最简单,但不能设置 Spring 中定义的DataSource,且不支持 Spring 管理的全局事务。
2)从JNDI中获取:
用于从 Java EE 服务器获取指定的EntityManagerFactory,这种方式在进行 Spring 事务管理时一般要使用 JTA 事务管理
3)LocalContainerEntityManagerFactoryBean:
适用于所有环境的 FactoryBean,能全面控制 EntityManagerFactory 配置,如指定 Spring 定义的 DataSource 等等。
Spring整合JPA步骤
1.导入需要使用的包
1)导入Spring以及SpringMVC
2)导入aspect包
3)导入依赖日志包commons-logging-1.2.jar
4)导入HIbernate以及HIbernate对JPA实现包
5)导入eclipselink
6)导入二级缓存包ehcache
7)导入数据库驱动
8)导入c3p0数据连接池
9)导入jstl
2.添加数据库资源文件
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jpa
jdbc.user=root
jdbc.password=root
3.配置Spring配置文件
- 配置数据库连接
<!-- 引入外部资源文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 队列中的最小连接数 -->
<property name="minPoolSize" value="15"></property>
<!-- 队列中的最大连接数 -->
<property name="maxPoolSize" value="25"></property>
<!-- 当连接耗尽时创建的连接数 -->
<property name="acquireIncrement" value="15"></property>
<!-- 等待时间 -->
<property name="checkoutTimeout" value="10000"></property>
<!-- 初始化连接数 -->
<property name="initialPoolSize" value="20"></property>
<!-- 最大空闲时间,超出时间连接将被丢弃 -->
<property name="maxIdleTime" value="20"></property>
<!-- 每隔60秒检测空闲连接 -->
<property name="idleConnectionTestPeriod" value="60000"></property>
</bean>
配置EntityManagerFactory对象
<!-- 配置entityManagerFactory --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <!-- 设置数据源 --> <property name="dataSource" ref="dataSource" /> <!-- jpa注解所在的包 --> <property name="packagesToScan" value="com.miya.ssp.entities" /> <!-- 配置jpa提供商的适配器,可以通过内部bean的方式类配置 --> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> </property> <!-- 配置JPA的基本属性 --> <property name="jpaProperties"> <!-- 配置jpa基本属性 --> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 配置二级缓存 --> <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop key="hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.EhCacheRegionFactory </prop> <prop key="hibernate.cache.use_query_cache">true</prop> </props> </property> </bean>事物及其他配置,在这里我们只需要管理非@Controller的bean就行
<!-- 配置事务管理器 --> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- 配置支持注解的事务 --> <tx:annotation-driven transaction-manager="txManager"/> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.miya.ssp" > <!-- 除了@Controller修飾的全部都要 --> <context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller"/> </context:component-scan>
4.配置SpringMVC配置文件
在这里我们只管理@Controller的bean
<!-- 扫描所有@Controller注解修饰的类 --> <context:component-scan base-package="com.miya.ssp"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan><!--将非mapping配置下的请求交给默认的Servlet来处理 --> <mvc:default-servlet-handler /> <!--如果添加了默认servlet,mvc请求将无效,需要添加annotation-driven --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 配置试图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>
5.配置WEB.xml文件
<!-- 添加Spring容器的监听 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 启动SpringMVC核心控制器 -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 添加PUT DELETE支持 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面基本上配置已经完成。
解决JPA懒加载问题
如果我们在属性里设置了懒加载那么,在页面上会报错,Spring给我们提供了一个JPA懒加载解决的方案,我们只需要在WEB.XML中配置,就可以很好的解决JPA在页面上使用到关联对象报出的懒加载错误。
<!-- 解决JPA懒加载问题 -->
<filter>
<filter-name>OpenEntityManager</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenEntityManager</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JPA整合Spring案例的更多相关文章
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- Spring Data JPA 整合Spring 第二篇
主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...
- Spring Boot:整合Spring Data JPA
综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范.其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种 ...
- Spring Kafka整合Spring Boot创建生产者客户端案例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...
- Spring Boot 揭秘与实战(二) 数据存储篇 - JPA整合
文章目录 1. 环境依赖 2. 数据源 3. 脚本初始化 4. JPA 整合方案一 通过继承 JpaRepository 接口 4.1. 实体对象 4.2. DAO相关 4.3. Service相关 ...
- Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...
- SpringBoot第九篇:整合Spring Data JPA
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10910059.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 前面几章, ...
- springboot整合spring Data JPA
今天敲代码,一连串的错误,我也是服气~果然,我们不是在出bug,就是在找bug的路上…… 今天完成的是springboot整合spring data JPA ,出了一连串的错,真是头大 java.sq ...
- Spring Boot 整合Spring Data JPA
Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...
随机推荐
- jq的dom操作
代码可以在该网址测试:www.w3school.com.cn/tiy/t.asp?f=jquery_manipulation_detach_move attr 使用函数来设置属性/值:函数参数为选择器 ...
- ionic编译安卓App
安装node.js 安装Android Studio 运行Android Studio安装SDK,在D:\AndroidSDK 配置SDK环境 ANDROID_HOME=D:\AndroidSDK P ...
- tomcat BIO / NIO
BIO NIO ref https://www.jianshu.com/p/76ff17bc6dea http://gearever.iteye.com/blog/1841586
- 省市联动-获取资源文件xml 获取nodes的方法要学会
try { SAXReader reader = new SAXReader(); InputStream input = this.getClass().getResourceAsStream(&q ...
- SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用
SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法._冷雨玫瑰_新浪博客---和这文章描述差不多http://blog.sina.com.cn/s/blog_672b419f0 ...
- MySql cmd下的学习笔记 —— 有关建立表的操作(有关于数据类型)
(01)建表的过程实际上是 声明字段 的过程 一. 列类型(字段): 存储同样的数据时,不同的列类型,所占据的空间和效率是不一样的,这就是建表时要考虑的意义. 二.MySQL三大列类型 数值型 ...
- [转载]Meta Learning单排小教学
原文链接:Meta Learning单排小教学 虽然Meta Learning现在已经非常火了,但是还有很多小伙伴对于Meta Learning不是特别理解.考虑到我的这个AI游乐场将充斥着Meta ...
- 什么是联机分析处理(OLAP)
OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来. 当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction pro ...
- 20165325 2017-2018-2《Java程序设计》课程总结
20165325 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 1.预备作业一:我期待的师生关系 20165325 期望的师生关系 简要内容: 我心中的好老师 ...
- 【转】python3解析库lxml
转自:http://www.cnblogs.com/zhangxinqi/p/9210211.html 阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2 ...