Spring-data-jpa 学习笔记

Posted zeng1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-data-jpa 学习笔记相关的知识,希望对你有一定的参考价值。

        Spring家族越来越强大,作为一名javaWeb开发人员,学习Spring家族的东西是必须的。在此记录学习Spring-data-jpa的相关知识,方便后续查阅。

一、spring-data-jpa的简单介绍

SpringData : Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。

SpringData 项目所支持 NoSQL 存储:

  •  MongoDB (文档数据库)
  •  Neo4j(图形数据库)
  •  Redis(键/值存储)
  •  Hbase(列族数据库)

SpringData 项目所支持的关系数据存储技术:

  • JDBC
  • JPA


JPA Spring Data : 致力于减少数据访问层 (DAO) 的开发量, 开发者唯一要做的就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个 UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。


Spring Data JPA 进行持久层(即Dao)开发一般分三个步骤:

    • 声明持久层的接口,该接口继承 Repository(或Repository的子接口,其中定义了一些常用的增删改查,以及分页相关的方法)。
    • 在接口中声明需要的业务方法。Spring Data 将根据给定的策略生成实现代码。
    • 在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。


二、QuickStart

(1)创建项目并添加Maven依赖

         首先我们在eclipse中创建一个Maven的java项目,然后添加依赖。

         项目结构见右图:        

 

         主要依赖有:

      • spring-data-jpa
      • Hibernate相关依赖
      • c3p0依赖
      • mysql驱动

         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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zxy</groupId>
	<artifactId>springdata-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<!-- 全局属性配置  -->
	<properties>
		<project.source.encoding>utf-8</project.source.encoding>
	    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	    <!-- 防止控制输出台中文乱码 -->
		<argLine>-Dfile.encoding=UTF-8</argLine> 
	</properties>
		
	<dependencies>
		<!-- junit_jar包依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId> 
			<version>4.11</version>
			<!--保留到测试 -->
			<scope>test</scope>
		</dependency>
		<!-- spring-data-jpa相关依赖 
			(这个依赖自动把一堆spring的东西依赖进来了,所有可以不需要再引入spring的包)-->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-jpa</artifactId>
			<version>1.11.7.RELEASE</version>
		</dependency>
		<!-- Hibernate -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.0.11.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>5.0.11.Final</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.5.2</version>
		</dependency>
		<!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.29</version>
        </dependency>
	</dependencies>
		
	<build>
		<plugins>
			<!-- 编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<configuration>
					<!-- 源码用1.8 -->
					<source>1.8</source>
					<!-- 打成jar用1.8 -->
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
      
      这里我解释下为何不添加Spring的其他的依赖,主要是spring-data-jpa这个依赖了一堆spring相关的依赖。见下图就明白了
                

(2)整合SpringData,配置applicationContext.xml
        这个整合很重要,我在网上找了好久,没找到特别好的demo;因此特意把这一步记录下来。
       <1> 首先我们添加一个和数据库相关的properties文件;新建db.properties文件,内容如下
jdbcUrl=jdbc:mysql://localhost:3306/springdata?useUnicode=true&characterEncoding=utf8
driverClass=com.mysql.jdbc.Driver
user=root
password=root
initialPoolSize=10
maxPoolSize=30
        
        <2> 然后我们需要新建一个Spring的配置文件,因此新建一个applicationContext.xml文件。里面大致配置的东西有:
      • 开启包扫描,扫描service层,让service层的对象交给Spring容器管理
      • 读取properties文件
      • 配置数据源dataSource
      • 配置JPA的EntityManagerFactory, 这里面有个包扫描,是扫描实体类那一层的
      • 配置事务管理器transactionManager
      • 配置支持注解的事务
      • 配置SpringData这里包扫描是扫描dao层,扫描那些定义的接口
        文件里面的具体内容如下:
<?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:context="http://www.springf

以上是关于Spring-data-jpa 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot学习进阶笔记-Spring-data-jpa

学习笔记:python3,代码片段(2017)

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

spring-data-jpa

DOM探索之基础详解——学习笔记

学习Spring-Data-Jpa(二十)---@EnableJpaRepositories