学习
实践
活动
工具
TVP
写文章

Spring Boot使用spring-data-jpa快速访问数据库

【Spring Boot】(27)、Spring Boot使用spring-data-jpa快速访问数据库

一、JPA

Spring Data JPA 是Spring Data 的一个子项目,它通过提供基于JPA的Repository极大了减少了操作JPA的代码。Spring Data JPA旨在通过减少实际需要的数量来显着提高数据访问层的实现。在Spring环境中需要配置大量的XML配置,但是SpringBoot基本上帮助我们配置好了,我们只需要简单地配置一下DataSource和几项jpa额外的配置就完成了整个配置持久化层的工作。EntityManagerFactory那些都不用配置了。JPA不是一种框架,而只是一种ORM规范,而这种规范具体由其他厂商来实现,其中最熟悉的莫过于Hibernate了。网络上对JPA的褒贬不一,特别是用JPA进行多表操作的时候,确实是比较繁琐。当然任何技术有好的方面也有坏的方面,本章重点不在于此。

二、添加依赖

三、数据源和JPA配置

四、JPA查询语法

4.1、JPA内置方法

4.1.1、RepositoryJpa基层接口

4.1.2、CrudRepository专门用于crud的接口

4.1.3、PagingAndSortingRepository带有简单的分页和排序的接口

4.1.4、JpaRepository带有crud接口和分页、排序的接口

4.1.5、JpaSpecificationExecutor用于复杂的条件查询并分页、排序功能

以上一大堆JPA内置方法,可以直接使用,而无需再声明定义了。当然如果想重载或者自定义的话,可以重新声明定义下。

4.2、通过解析方法名创建查询

例如:

findByLastName(String lastName):表示根据lastName精确查询

findByLastNameLike(String lastName):表示根据lastName模糊查询

findByAgeBetween(int min, int max):表示查询年龄在[min,max]之间的数据

findByAgeEquals(int age):表示查询年龄等于age的数据

findByAgeAndGender(int age, String gender):表示根据年龄等于age且性别为gender的数据

等等...

4.3、使用自定义的@Query注解进行查询

注意:

使用@Modifying注解表示该Query是个增删改的操作,需要事务管理。

指定nativeQuery=true,则说明该Query的sql语句为原生SQL,而不是hql,默认为false,即使用hql查询。

五、JPA常用注解

@Entity:设置Pojo为实体

@Table:设置表名

@Id:设置主键

@Column:设置普通列名

name:字段名,默认为空串

unique:是否唯一,默认为false

nullable:是否可以为空,默认为true

insertable:是否可插入,默认为true

updatable:是否可更新,默认为true

length:列值最大长度,默认为255

precision:精度,即数字长度,默认为0

scale:小数点后位数,默认为0

@GeneratedValue:主键生成策略,有AUTO, TABLE, SEQUENCE, IDENTITY四种属性值

@SequenceGenerator:按照序列生成主键的序列名

@Transient:临时字段,不需要跟数据库映射的字段

@Temporal:时间格式,有DATE, TIME, TIMESTAMP三种属性值

@Embedded:注解属性,用来表示该属性的类是个嵌入类,同时嵌入类必须使用@Embeddable注解

@Embeddable:注解类,表示该类是个嵌入类,会被嵌入到其他类中

@JoinColumn:定义外键列的属性

name:外键列的名称

referencedColumnName:参考列,默认值为关联表的主键。

@OneToOne:定义1-1的关联关系

@OneToMany:定义1-n的关联关系

@ManyToOne:定义n-1的关联关系

@ManyToMany:定义n-n的关联关系

cascade:关联属性,这个属性定义了当前类对象操作了之后,级联对象的操作。有ALL,PERSIST,MERGE,REMOVE,REFRESH,DETACH六种属性值。

fetch:级联数据加载策略

LAZY:表示关系类在被访问时才被加载(默认)

EAGER:表示关系类在主类加载的时候同时加载

mappedBy:拥有关联关系的域,如果关系是单向的就不需要。双向关系表,那么拥有关系的这一方有建立、解除和更新与另一方关系的能力,而另一方没有,只能被动管理,这个属性被定义在关系的被拥有方。双向@OneToOne,双向@OneToMany,双向@ManyToMany中均需要有此属性。注意点:该属性与@JoinColumn互斥,不能同时出现在类的属性上。

具体注解使用请参看我的GitHub或者码云中的【java-jpa】。

六、使用JPA操作数据库

附上代码:

实体类Person

控制器类PersonController

业务层接口IPersonService

业务层接口实现类PersonServiceImpl

持久化接口IPersonRepository

下节会分析Spring Boot中对JPA自动配置的源码,尽情期待,明天不见不散。

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

扫码关注腾讯云开发者

领取腾讯云代金券