Spring Data JPA教程,第一部分: Configuration(翻译)
Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量。本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知识。
本文是我的Spring Data JPA教程的第一部分,将向你描述的是,当你使用Hibernate作为你的jpa提供者时怎样配置Spring Data JPA,在我们开始之前,首先应该明白一件事情,本教程不是Hibernate, JPA 或 Spring的人们教程,如果你想理解在我的Spring Data JPA教程中描述的概念,你必须有关于这些技术方面的经验
本教程的依赖如下:
- BoneCP 0.7.1.RELEASE (同样你也可以采用其他的数据源实现)
- Hibernate 4.0.1.Final
- Spring Framework 3.1.0.RELEASE
- Spring Data JPA 1.0.2
- Servlet API 3.0
当然,既然本人使用Maven作为构建工具,如果你想运行我的example应用你必须安装它。
开始
现在开始了. 你可以通过如下步骤配置Spring Data JPA:
- 获取必须的依赖.
- 在Spring application context configuration里面配置必须的bean. Spring Data JPA需要的bean是: 数据源, 事务管理器 和 实体管理工厂.
- 配置Spring Data JPA.
这些步骤在下面详细解释:
获取必须的依赖
首先,你需要获取必须的依赖,你可以通过在你的pom.xml文件里面配置这些依赖,我的example的pom.xml如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.petrikainulainen.spring</groupId><artifactId>data-jpa-tutorial-part-one</artifactId><packaging>war</packaging><version>0.1</version><name>Spring Data JPA Tutorial Part One</name><description>Spring Data JPA Tutorial Part One</description><licenses><license><name>Apache License 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0</url></license></licenses><url>http://www.petrikainulainen.net</url><repositories><repository><id>repository.jboss.org-public</id><name>JBoss repository</name><url>https://repository.jboss.org/nexus/content/groups/public</url></repository></repositories><properties><hibernate.version>4.0.1.Final</hibernate.version><mysql.connector.version>5.1.18</mysql.connector.version><slf4j.version>1.6.1</slf4j.version><spring.version>3.1.0.RELEASE</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Spring Framework --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency><!-- Spring Data JPA --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.0.2.RELEASE</version></dependency><!-- Hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><!-- H2 Database --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.3.160</version></dependency><!-- MySQL JDBC connector --><!-- If you want to use MySQL, uncomment this dependency declation. --><!--<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.connector.version}</version></dependency>--><!-- PostgreSQL JDBC 4 --><!-- If you don't want to use PostgreSQL, uncomment this dependency declaration. --><!--<dependency><groupId>postgresql</groupId><artifactId>postgresql</artifactId><version>9.0-801.jdbc4</version></dependency>--><!-- BoneCP --><dependency><groupId>com.jolbox</groupId><artifactId>bonecp</artifactId><version>0.7.1.RELEASE</version></dependency><!-- Servlet API 3.0 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- Logging dependencies --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><!-- Testing Dependencies --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency></dependencies><build><finalName>data-jpa-tutorial-part-one</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.1.1</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.0.RC2</version><configuration><scanIntervalSeconds>0</scanIntervalSeconds><webAppConfig><defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor></webAppConfig></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-site-plugin</artifactId><version>3.0</version><configuration><reportPlugins><!-- Cobertura Plugin --><plugin><groupId>org.codehaus.mojo</groupId><artifactId>cobertura-maven-plugin</artifactId><version>2.5.1</version></plugin></reportPlugins></configuration></plugin></plugins></build> </project>
配置 Spring应用上下文
第二步,你必须配置Spring应用上下文,也许您还记得,你需要配置数据源,事务管理器和实体管理器工厂的bean。如果您正在使用Spring 3.1和Servlet 3.0,你可以这样做到,通过实现一个Java配置类,并在您的Web应用程序初始化的时候加载该配置类。我的应用程序上下文配置类的内容如下下:
import com.jolbox.bonecp.BoneCPDataSource; import org.hibernate.ejb.HibernatePersistence; import org.springframework.context.MessageSource; import org.springframework.context.annotation.*; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.core.env.Environment; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView;import javax.annotation.Resource; import javax.sql.DataSource;/*** An application context Java configuration class. The usage of Java configuration* requires Spring Framework 3.0 or higher with following exceptions:* <ul>* <li>@EnableWebMvc annotation requires Spring Framework 3.1</li>* </ul>* @author Petri Kainulainen*/ @Configuration @ComponentScan(basePackages = {"net.petrikainulainen.spring.datajpa.controller"}) @EnableWebMvc @ImportResource("classpath:applicationContext.xml") @PropertySource("classpath:application.properties") public class ApplicationContext {private static final String VIEW_RESOLVER_PREFIX = "/WEB-INF/jsp/";private static final String VIEW_RESOLVER_SUFFIX = ".jsp";private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";private static final String PROPERTY_NAME_DATABASE_URL = "db.url";private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";private static final String PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY = "hibernate.ejb.naming_strategy";private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";private static final String PROPERTY_NAME_MESSAGESOURCE_BASENAME = "message.source.basename";private static final String PROPERTY_NAME_MESSAGESOURCE_USE_CODE_AS_DEFAULT_MESSAGE = "message.source.use.code.as.default.message";@Resourceprivate Environment environment;@Beanpublic DataSource dataSource() {BoneCPDataSource dataSource = new BoneCPDataSource();dataSource.setDriverClass(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));dataSource.setJdbcUrl(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));dataSource.setUsername(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));dataSource.setPassword(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));return dataSource;}@Beanpublic JpaTransactionManager transactionManager() throws ClassNotFoundException {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());return transactionManager;}@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() throws ClassNotFoundException {LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();entityManagerFactoryBean.setDataSource(dataSource());entityManagerFactoryBean.setPackagesToScan(environment.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);Properties jpaProterties = new Properties();jpaProterties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));jpaProterties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));jpaProterties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));jpaProterties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));entityManagerFactoryBean.setJpaProperties(jpaProterties);return entityManagerFactoryBean;}@Beanpublic MessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();messageSource.setBasename(environment.getRequiredProperty(PROPERTY_NAME_MESSAGESOURCE_BASENAME));messageSource.setUseCodeAsDefaultMessage(Boolean.parseBoolean(environment.getRequiredProperty(PROPERTY_NAME_MESSAGESOURCE_USE_CODE_AS_DEFAULT_MESSAGE)));return messageSource;}@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setViewClass(JstlView.class);viewResolver.setPrefix(VIEW_RESOLVER_PREFIX);viewResolver.setSuffix(VIEW_RESOLVER_SUFFIX);return viewResolver;} }
我的web应用初始器如下:
import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.*;/*** Web application Java configuration class. The usage of web application* initializer requires Spring Framework 3.1 and Servlet 3.0.* @author Petri Kainulainen*/ public class DataJPAExampleInitializer implements WebApplicationInitializer {private static final String DISPATCHER_SERVLET_NAME = "dispatcher";private static final String DISPATCHER_SERVLET_MAPPING = "/";@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();rootContext.register(ApplicationContext.class);ServletRegistration.Dynamic dispatcher = servletContext.addServlet(DISPATCHER_SERVLET_NAME, new DispatcherServlet(rootContext));dispatcher.setLoadOnStartup(1);dispatcher.addMapping(DISPATCHER_SERVLET_MAPPING);servletContext.addListener(new ContextLoaderListener(rootContext));} }
你可能注意到,本人使用@PropertySource annotation来标识属性文件的位置,属性文件包含了使用的配置参数的值,myapplication.properties文件内容如下:
# The default database is H2 memory database but I have also # added configuration needed to use either MySQL and PostgreSQL.#Database Configuration db.driver=org.h2.Driver #db.driver=com.mysql.jdbc.Driver #db.driver=org.postgresql.Driver db.url=jdbc:h2:mem:datajpa #db.url=jdbc:mysql://localhost:3306/datajpa #db.url=jdbc:postgresql://localhost/datajpa db.username=sa db.password=#Hibernate Configuration hibernate.dialect=org.hibernate.dialect.H2Dialect #hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect #hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.format_sql=true hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy hibernate.show_sql=true#MessageSource message.source.basename=i18n/messages message.source.use.code.as.default.message=true#EntityManager #Declares the base package of the entity classes entitymanager.packages.to.scan=net.petrikainulainen.spring.datajpa.model
配置Spring Data JPA
第三步,你必须配置Spring Data JPA,如果你留心,你可能已经注意到,本人在我的应用上下文配置类使用@ImportResource annotation 来从xml配置文件导入额外的配置. 当前Spring Data JPA不支持java配置,因此,唯一的方式是使用XML配置文件,我的applicationContext.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/data/jpahttp://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!--Configures the location of static resources such as css files.Requires Spring Framework 3.0 or higher.--><mvc:resources mapping="/static/**" location="/static/"/><!--Ensures that dispatcher servlet can be mapped to '/' and static resourcesare still served by the containers default servlet. Requires Spring Framework3.0 or higher.--><mvc:default-servlet-handler/><!--Configures Spring Data JPA and sets the base package of my DAOs.--><jpa:repositories base-package="net.petrikainulainen.spring.datajpa.repository"/> </beans>
You Are Done
本文介绍内容:我现在已经向你演示了如何配置Spring Data JPA。同时也创建了一个示例应用程序来演示配置的实际运行。你可以通过从Github获取我的示例应用程序来测试自己的配置,并通过使用Maven Jetty plugin来运行这个示例web应用(注:请记住,首先创建模型和仓库的package。既然不可能向Git暂存区域添加空目录,Github仓库也不具有它们)。
我的Spring Data JPA教程的第二部分介绍了如何通过使用Spring Data JPA创建一个简单的CRUD Web应用程序。敬请关注。
---------------------------------------------------------------------------
本系列Spring Data JPA 教程翻译系本人原创
作者 博客园 刺猬的温驯
本文链接 http://www.cnblogs.com/chenying99/archive/2013/06/19/3143516.html
本文版权归作者所有,未经作者同意,严禁转载及用作商业传播,否则将追究法律责任。
转载于:https://www.cnblogs.com/chenying99/p/3143516.html
Spring Data JPA教程,第一部分: Configuration(翻译)相关推荐
- Spring Data JPA教程第一部分:配置
Spring Data JPA是一个旨在简化基于JPA的存储库的创建并减少与数据库通信所需的代码量的项目. 在我的工作和个人爱好项目中,我已经使用了一段时间,确实使事情变得更加简单和整洁. 现在是时候 ...
- Spring Data JPA 教程(翻译)
写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...
- Spring Data JPA教程
在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务. DAO层通常包含许多样板代码,应简化这些样板代码,以减少代码行数并使代码可重复使用. 在本教程中,我们将讨论Spring数据的J ...
- Spring Data JPA教程:获取所需的依赖关系
在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...
- Spring Data JPA教程:简介
创建使用Java Persistence API的存储库是一个繁琐的过程,需要大量时间,并且需要大量样板代码. 通过执行以下步骤,我们可以消除一些样板代码: 创建一个抽象的基础存储库类,该类为实体提供 ...
- Spring Data JPA(官方文档翻译)
关于本书 介绍 关于这本指南 第一章 前言 第二章 新增及注意点 第三章 项目依赖 第四章 使用Spring Data Repositories 4.1 核心概念 4.2 查询方法 4.3 定义rep ...
- Spring Data JPA的持久层
1.概述 本文将重点介绍Spring 3.1,JPA和Spring Data的持久层的配置和实现. 有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍,请参阅本文 ...
- Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...
- node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
最新文章
- POJ2796 Feel Good(单调栈)
- dvwa如何打开_一篇文章让你搭建自己的Web安全测试平台(Dvwa)
- 共模电感适用的频率_电感选型详解及设计规范
- boost::geometry::topological_dimension用法的测试程序
- 2020年中国.NET开发者大会第二天 WorkShop
- [转] SQL Server中的行列转换问题
- python数据分析兼职能挣钱吗_Python开发能从事数据分析吗
- [转载]Hamachi 安装过程
- SONiC镜像编译指南(转,参考1)
- sql2005自动备份
- cad2020打印样式放在哪个文件夹_打印机故障:打印一直出现乱码,什么原因?...
- matlab 添加文本框textbox
- gitlab 版本升级
- 【LeetCode-1413】1431. 拥有最多糖果的孩子
- 蛙蛙推荐:如何编写高质量的python程序
- Sumatra PDF阅读器——快捷键与配置
- Linux 驱动简介
- 新版Chrome自动禁用第三方插件的解决办法[转]
- Aria2 在 macOS 上的详细安装教程!
- 使用mobile-detect.js获取手机型号和系统
热门文章
- 世上可有后悔药?服务器里建快照
- python 开发工具_「干货」推荐一整套 Python 开发工具
- vue将经纬度转换成地理名称_新武汉北,红安有了一个新的地理名称,恒大项目将对标上海迪士尼...
- 将多张连续的静态图转成gif动态图
- intellij IDEA:Error : java 不支持发行版本xxx 的问题
- 数据结构 创建顺序表
- SAP License:成本不是靠算出来的
- Axure经典案例高保真交互下载(数据统计图高保真原型+雷达图+条形图+折线图+web端通用后台管理原型+统计表、统计分析+用户画像分析)
- 详解HTML5网页结构
- 2017/05/11读性能测试书籍后感