【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自动配置的源码,尽情期待,明天不见不散。
领取专属 10元无门槛券
私享最新 技术干货