目录

Spring Data 简介

Spring Data 特点

JPA(Java 持久化 API) 简介

Spring Data JPA 简介

Spring Data JPA 快速入门


Spring Data 简介

1、对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。

2、Spring Boot 添加了大量自动配置,屏蔽了很多设置,引入各种 XxxTemplate,XxxRepository 来简化程序员对数据访问层的操作。对程序员来说只需要进行简单的配置即可使用

3、Spring Data 官网地址:Redirecting…

2、Spring Data 是一个用于简化数据库访问的开源框架,支持访问关系型数据库、非关系型数据库、map-reduce 框架、以及云计算服务等。

3、Spring Data 框架主要模块(Main modules)/子项目如下:

  • Spring Data Commons - Core Spring concepts underpinning every Spring Data project.
  • Spring Data JPA - Makes it easy to implement JPA-based repositories.
  • Spring Data JDBC - JDBC-based repositories.
  • Spring Data KeyValue - Map-based repositories and SPIs to easily build a Spring Data module for key-value stores.
  • Spring Data LDAP - Provides Spring Data repository support for Spring LDAP.
  • Spring Data MongoDB - Spring based, object-document support and repositories for MongoDB.
  • Spring Data REST - Exports Spring Data repositories as hypermedia-driven RESTful resources.
  • Spring Data Redis - Provides easy configuration and access to Redis from Spring applications.
  • Spring Data for Apache Cassandra - Spring Data module for Apache Cassandra.
  • Spring Data for Apache Solr - Spring Data module for Apache Solr.
  • Spring Data for Pivotal GemFire - Provides easy configuration and access to Pivotal GemFire from Spring applications.

Spring Data 特点

1、Spring Data 提供使用统一的 API 来对数据访问层进行操作,这主要是 Spring Data Commons 项目来实现的。

2、Spring Data Commons 让程序员在使用关系型或者非关系型数据访问技术时都基于 Spring 提供的统一标准,而不用再关心底层到底是何种数据。

3、Spring Data Commons 提供的标准包含了常用的 CRUD(创建、获取、更新、删除)、查询、排序和分页等相关操作,对底层任意数据库都是使用一套 API 搞定,大大简化操作。

4、Spring Data 提供统一的 Repository(仓库) 接口:

1、Repository<T, ID extends Serializable>:统一接口,根接口
2、RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>:基于乐观锁机制
3、CrudRepository<T, ID extends Serializable>:通用 CRUD 操作接口
4、PagingAndSortingRepository<T, ID extends Serializable>:通用 CRUD 及分页、排序等操作操作
5、JpaRepository:操作关系型数据库时,只要继承此接口,则相当于有了 CRUD、分页、排序等常用的所有方法,程序员可以直接调用。

5、提供数据访问模板类 xxxTemplate,如:MongoTemplate、RedisTemplate 等

JPA(Java 持久化 API) 简介

1、JPA 全称 Java Persistence API(Java 持久化 API),是 Java 官方提出的 Java 持久化规范,为开发人员提供了一种对象/关系映射工具来管理 Java 应用中的关系数据,从 Java EE 5 开始发布。

2、JPA (Java 持久化 API) 为对象关系映射提供POJO持久性模型,由 JESR 220 的 EJB 3 软件专家组开发,但它的使用不限于EJB 软件组件。它也可以直接由 Web 应用程序和应用程序客户端使用,甚至可以在Java EE平台之外,例如,在Java SE应用程序中使用。

Java Persistence API

The Java Persistence API provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications. See JSR 220.

3、目前比较成熟的 JPA 框架主要包括 Jboss 的 Hibernate EntityManager、Oracle 捐献给 Eclipse 社区的 EclipseLink、Apache 的 OpenJPA ,以及 Spring 的 Spring Data JPA 等。

4、Oracle JPA 官网地址:Java Persistence API

5、官方 Java Persistence API  2.0 文档:百度网盘 请输入提取码 密码:ycv1

Spring Data JPA 简介

1、Spring Data JPA 是 Spring Data 框架下的一个子项目目的是专门用于简化关系型数据库的操作。同理还有简化 Redis 操作的 Spring Data Redis 、简化 Solr 操作的 Spring Data for Apache Solr 、简化 MongoDB 操作的 Spring Data MongoDB 等

2、Spring Data JPA 官网:Redirecting…

3、Spring Data JPA 2.1.0 官方文档:Spring Data JPA - Reference Documentation

4、项目开发中程序员面向 Spring Data 编程,只需要实现对应的接口重写其中的方法即可操作数据库

5、如上图所示操作关系型数据库时引入 Sping Data JPA 模块,然后实现接口重写方法即可操作,同理操作 Resid 时引入 Spring Data Redis,操作 MongoDB 时引入 Spring Data MongDB。

6、Sping Data JPA 底层默认由 Hibernate 实现,但操作比 Hibernate 更简单,以前 Hibernate 还要自己封装 BaseDao 层,而 Spring Data JPA 连这一步都省略了,实现接口之后,就可以直接调用其中的 CRUD 方法以及排序、分页等方法,更加简洁。

Spring Data JPA 快速入门

1、Sping Data JPA 底层默认由 Hibernate 实现,同样基于 ORM(对象关系型映射),但操作比 Hibernate 更简单,以前 Hibernate 还需要程序员封装 BaseDao 层,而 Spring Data JPA 连这一步都省略了,实现接口之后,就可以直接调用其中的 CRUD 方法以及排序、分页等方法,更加简洁。

2、本文环境 Java JDK 1.8 + Spring Boot 2.1.3 + Mysql 数据库 V8.0.21,web 应用的 pom.xml 文件导入 (在线源码):

        <!-- 引入 Spring Data JPA,JPA 组件内部会依赖 JDBC 组件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Mysql 数据库驱动,spring boot 2.1.3 时,mysql 驱动版本为 8.0.15 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

一:数据源配置(在线源码)

1、本文直接使用默认 Spring Boot 2.0.4 提供的 默认数据源 HikariDataSource ,如果需要使用 DruidDataSource 的可以参考《 Spring Boot 自定义数据源 DruidDataSource》

spring:datasource:username: rootpassword: root#高版本的 spring boot 搭配的 mysql 驱动版本通常也较高,如 mysql-connector-java:8.0.X#此时 url 的值要带时区 serverTimezone、driver-class-name 的值要带 cjurl: jdbc:mysql://127.0.0.1:3306/wang?characterEncoding=UTF-8&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Driver

低版本的 mysql 驱动时,配置如下:
url: jdbc:mysql://127.0.0.1:3306/wang?characterEncoding=UTF-8   
driver-class-name: com.mysql.jdbc.Driver

2、可以自己获取 javax.sql.DataSource 打印,测试一下获取数据源是否成功,在线源码:https://github.com/wangmaoxiong/red-door/blob/master/src/test/java/com/wmx/reddoor/DataSourceTest.java

二:POJO 实体对象(在线源码

1、提供封装数据库表的 POJO 对象,以及配置与数据库表的映射关系.

2、因为 Spring Data JPA 也是基于 ORM 思想,而且底层又是 Hibernate 实现,所以 POJO 与数据库表的映射关系写法与以前写 Hibernate 时基本无异

3、可以自己在数据库中手动建表,也可以通过 Hibernate 根据映射关系自动建表,本文演示后者。

4、实体类中的 javax.persistence.Entity、javax.persistence.Id 注解必须要写,否则启动报错!

@Entity 标注在类上,告诉 JPA 本类是一个与数据库表进行映射的实体类,而不是普通的 Java Bean
@Table 标注在类上(可选),表示实体对应的数据库表的信息,name 属性: 可选,定义表的名称,默认表名和实体名称一致,首字母小写。
@id

标注在主键属性上,一个实体只能有一个属性被映射为主键,@id通常要与主键生成策略的注解一起使用!

@GeneratedValue

(strategy=GenerationType.xxx)

标注在类上(可选),strategy:表示主键生成策略:AUTO(默认),INDENTITY,SEQUENCE 和 TABLE 4种,分别表示:
让 ORM 框架自动选择;
根据数据库的主键特性生成(如mysql的自动增长);
根据数据库的序列生成(如oracle);
根据一个额外的表生成主键;

@Column(可选)

描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用,属性如下:
name:表示数据库表中该字段的名称,默认与属性名称一致;
nullable:表示该字段是否允许为null,默认为true;
unique:表示该字段是否是唯一约束,默认为false;
length:表示该字段的大小,仅对String类型的字段有效 。
insertable:表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true;
updateable:表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,该属性非常有用如对于birthday字段;

@Transient(可选)

表示该属性并非一个到数据库表的字段映射,ORM框架将忽略该属性。

比如根据出生日期自动计算出来的年龄(age)属性数据库实际并不存储.

三:自定义 Dao 持久化接口(在线源码)

1、编写一个 Dao 接口(Repository)来操作实体类对应的数据表,实现了如下的接口,就拥有了其对应的方法。

2、因为使用的是 Spring Data JPA,所以直接继承 JpaRepository 接口,之后便可以直接从 service 层或者 Controller 层调用其方法。

四:Spring data JPA 配置(在线源码)

1、Spring Boot 提供了 JPA 配置,如以前 Hibernate 时期的是否显示 sql 语句,对表策略等,如下所示只是写法略有不同,意义与以前 Hibernate 时完全一样。

2、如果是自己在数据库中手动建表,则省略 "ddl-auto" 的对表策略配置即可。

spring:#JPA 配置,可以参考官网:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#common-application-propertiesjpa:#    hibernate:#       ddl‐auto: update # 更新或者创建数据库表结构,省略时将不会自动生成数据库表#       show‐sql: true # 控制台是否显示SQLgenerate-ddl: true # 是否根据实体(@Entity)自动建表,默认为 false。show-sql: true # 是否显示 sql 语句

3、完整配置选项可以参考官网:Spring Boot Reference Guide,内容如下所示:

# JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)
spring.data.jpa.repositories.enabled=true # Whether to enable JPA repositories.
spring.jpa.database= # Target database to operate on, auto-detected by default. Can be alternatively set using the "databasePlatform" property.
spring.jpa.database-platform= # Name of the target database to operate on, auto-detected by default. Can be alternatively set using the "Database" enum.
spring.jpa.generate-ddl=false # Whether to initialize the schema on startup.
spring.jpa.hibernate.ddl-auto= # DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property. Defaults to "create-drop" when using an embedded database and no schema manager was detected. Otherwise, defaults to "none".
spring.jpa.hibernate.naming.implicit-strategy= # Fully qualified name of the implicit naming strategy.
spring.jpa.hibernate.naming.physical-strategy= # Fully qualified name of the physical naming strategy.
spring.jpa.hibernate.use-new-id-generator-mappings= # Whether to use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE.
spring.jpa.mapping-resources= # Mapping resources (equivalent to "mapping-file" entries in persistence.xml).
spring.jpa.open-in-view=true # Register OpenEntityManagerInViewInterceptor. Binds a JPA EntityManager to the thread for the entire processing of the request.
spring.jpa.properties.*= # Additional native properties to set on the JPA provider.
spring.jpa.show-sql=false # Whether to enable logging of SQL statements.

五:测试生成表

1、如果开启了自动建表配置,则启动应用,可以看到控制台会打印建表的 sql 信息。

六:Spring Data JPA 进行 CRUD(在线源码)

1、直接浏览器访问控制层,然后进行 CRUD 操作,操作结果返回给页面,省去 service 层。

2、本文的重点是 Spring Data JPA 入门,详细的 CRUD 方法使用可以参考《Spring Data JPA 常用 CRUD 操作汇总》

Spring Data JPA 概述 与 快速入门(操作 mysql 数据)相关推荐

  1. Spring Data JPA 五分钟快速入门和实践

    Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...

  2. Spring Data Jpa的JpaRepository的getOne()方法查询数据实体时报错could not initialize proxy

    问题描述:在使用Spring Data Jpa的JpaRepository的getOne()方法查询数据实体时报以下错误: org.hibernate.LazyInitializationExcept ...

  3. Spring Boot文档阅读笔记-使用Spring Data JPA连接多源数据库(MySQL和Oracle)

    下面这个小项目展示了如何连接2个数据库,一个是Oracle,一个是MySQL. 关键的Maven依赖: <dependency><groupId>org.springframe ...

  4. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

  5. 五分钟快速入门 Spring Data JPA

    Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...

  6. Spring Data JPA 从入门到精通~@Version处理乐观锁的问题

    @Version 处理乐观锁的问题 @Version 乐观锁介绍 我们在研究 Auditing 的时候,发现了一个有趣的注解 @Version,源码如下: package org.springfram ...

  7. Spring Data JPA 从入门到精通~Auditing及其事件详解

    Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时 ...

  8. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  9. 使用H2Database+Druid连接池+Spring Data JPA+Ehcache实现CRUD操作

    前言 注:本篇为纯实践篇,主要用于技术整合,介绍如何搭建一个完整全面的Web项目.如果对于技术原理还不了解的童鞋可点击下方链接,学习后在来~ H2数据库教程:H2数据库入门 缓存使用教程:在Sprin ...

  10. Spring Data JPA入门

    见:http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框 ...

最新文章

  1. Cisco/H3C交换机配置与管理完全手册(第2版)卓越网正式到货
  2. 使用AdMob实现广告统一
  3. 11粘土人脖卡面撑怎么用_零失败的神仙夏日卤味!用电饭煲就能做!配小酒可升仙!...
  4. 今晚直播:非自回归神经机器翻译 | PhD Talk #24
  5. CentOS 7 安装MySQL 5.6遇到问题及解决方案
  6. 实现物体绕不同轴旋转,并可以外部调用的函数
  7. 安装hadoop-2.3.0-cdh5.1.2全过程
  8. 3中查询数据库连接数
  9. jquery $(this)和this
  10. 进行api的HTML5inlinehook操作(飞秋官方下载)
  11. Debenham养老金项目关键流程1-员工分类流程
  12. word受权限保护无法打开_保护S71500程序的几种方式
  13. Android上传文件至服务器
  14. Machine Learning and Data Science 教授大师
  15. 网购工具软件chrome扩展插件大推荐
  16. 以太坊开发------Mist使用:合约及部署合约
  17. php微信公众号开发难吗,PHP微信公众号开发的两种模式
  18. 计算机视觉实战----AlexNet网络及使用colab跑YoloV5代码
  19. 2020年浙大计算机考研答疑
  20. 在Ubuntu 上安装和配置Snort 3 NIDS

热门文章

  1. evolving checkers players [Fogel and Chellapilla, 2002]
  2. mac地址扫描源码_ARP-基础-扫描-攻击-防范!
  3. 【数据分享】错颌畸形生长患者治疗数据集
  4. 拓端tecdat|使用R语言对进行地理空间数据可视化
  5. mysql数据库中修改错别字_MySQL 8.0.23 更新分享-爱可生
  6. windows10安装CUDA
  7. hyperparameter_hunter 超参数优化模块实践
  8. python可变参数之*args和*kwargs学习回顾
  9. 李宏毅 Gradient Descent总结
  10. vba commondialog控件添加不上_MyVBA加载宏——添加自定义菜单03——功能分析