第六篇:整合SpringDataJpa

是为了简化 应用的创建、运行、调试、部署等一系列问题而诞生的产物,

上一篇介绍了 的使用,对比原始的 而言,它更加的简洁。但随着表的增加,重复的CRUD工作让我们苦不堪言,这时候 的作用就体现出来了.....

JPA

JPA是 的简称,中文名Java持久层API,是官方(Sun)在JDK5.0后提出的Java持久化规范。其目的是为了简化现有 和 应用开发工作,以及整合现有的ORM技术实现规范统一

JPA的总体思想和现有 、 、 等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据:支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

API:操作实体对象来执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

JPA只是一种规范,它需要第三方自行实现其功能,在众多框架中 是最为强大的一个。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。同时Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。

Spring Data JPA

常见的ORM框架中 的JPA最为完整,因此 是采用基于JPA规范的 框架基础下提供了 层的实现。极大地简化了实现各种持久层的数据库访问而写的样板代码量,同时 提供了丰富的CRUD功能去管理实体类。

优点

丰富的API,简单操作无需编写额外的代码

丰富的SQL日志输出

缺点

学习成本较大,需要学习HQL

配置复杂,虽然 简化的大量的配置,关系映射多表查询配置依旧不容易

性能较差,对比 、 等ORM框架,它的性能无异于是最差的

导入依赖

在 中添加 的依赖

连接数据库

在 中添加如下配置。值得注意的是,SpringBoot默认会自动配置 ,它将优先采用 连接池,如果没有该依赖的情况则选取 ,如果前两者都不可用最后选取 。通过 属性可以指定其它种类的连接池

ddl-auto 几种属性

create:每次运行程序时,都会重新创建表,故而数据会丢失

create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表

upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)

validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错

具体编码

由于上面我们采用的是 方式,因此这里可以跳过手动建表的操作

实体类

JPA规范注解坐落在 包下,注解一定不要引用错了,否则会报错自增策略,不需要映射的字段可以通过 注解排除掉

常见的几种自增策略

TABLE:使用一个特定的数据库表格来保存主键

SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中自己编写的序列)。

IDENTITY:主键由数据库自动生成(主要是支持自动增长的数据库,如mysql)

AUTO:主键由程序控制,也是GenerationType的默认值。

Repository

创建 数据访问层接口,需要继承 ,第一个泛型参数是实体对象的名称,第二个是主键类型。只需要这样简单的配置,该 就拥常用的 功能, 本身就包含了常用功能,剩下的查询我们按照规范写接口即可,注解写HQL,也支持 这种根据字段名命名的方式(强烈推荐 对JPA支持非常NICE)

测试

完成数据访问层接口后,最后编写一个 测试类来检验代码的正确性。

下面的几个操作中,只有 是我们自己编写的代码,其它的都是继承自 接口中的方法,更关键的是分页及排序是如此的简单实例化一个 即可...

总结

更多内容请参考官方文档

目前很多大佬都写过关于的教程了,如有雷同,请多多包涵,本教程基于最新的 编写,包括新版本的特性都会一起介绍...

说点什么

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180508G0HCLE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券