Spring Boot Jpa

1、什么是Jpa

Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。Jpa是一套规范。

2、Spring Boot Jpa

Spring Boot Jpa 是 Spring 基于 ORM 框架、Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展。学习并使用 Spring Data Jpa 可以极大提高开发效率。

3、Jpa使用

基本查询,继承JpaRepository后有一些基本方法可以使用。重点理解ExampleMatcher
  • null Handler:Null值处理方式,枚举类型,有2个可选值,INCLUDE(包括),IGNORE(忽略)。标识作为条件的实体对象中,一个属性值(条件值)为Null是,是否参与过滤。当该选项值是INCLUDE时,表示仍参与过滤,会匹配数据库表中该字段值是Null的记录;若为IGNORE值,表示不参与过滤。

  • defaultStringMatcher:默认字符串匹配方式,枚举类型,有6个可选值,DEFAULT(默认,效果同EXACT),EXACT(相等),STARTING(开始匹配),ENDING(结束匹配),CONTAINING(包含,模糊匹配),REGEX(正则表达式)。该配置对所有字符串属性过滤有效,除非该属性在 propertySpecifiers 中单独定义自己的匹配方式。

  • defaultIgnoreCase:默认大小写忽略方式,布尔型,当值为false时,即不忽略,大小不相等。该配置对所有字符串属性过滤有效,除非该属性在 propertySpecifiers 中单独定义自己的忽略大小写方式。

  • propertySpecifiers:各属性特定查询方式,描述了各个属性单独定义的查询方式,每个查询方式中包含4个元素:属性名、字符串匹配方式、大小写忽略方式、属性转换器。如果属性未单独定义查询方式,或单独查询方式中,某个元素未定义(如:字符串匹配方式),则采用 ExampleMatcher 中定义的默认值,即上面介绍的 defaultStringMatcher 和 defaultIgnoreCase 的值。

  • ignoredPaths:忽略属性列表,忽略的属性不参与查询过滤。

Pageable pageable = PageRequest.of(user.getCurrentPage(),user.getPageSize(), Sort.Direction.ASC, "id");
Page page = userRepository.findAll(pageable);
User user = userRepository.getOne(1L);

ExampleMatcher matcher = ExampleMatcher.matching()
                //修改默认匹配器为模糊查询
//                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                //模糊查询匹配开头,即{account}%
                .withMatcher("account", ExampleMatcher.GenericPropertyMatchers.startsWith())
                //全部模糊查询,即%{password}%
                .withMatcher("password" ,ExampleMatcher.GenericPropertyMatchers.contains())
                //忽略属性:是否关注。因为是基本类型,需要忽略掉
                .withIgnorePaths("id");  
Page page = userRepository.findAll(example,pageable);
自定义简单查询

自定义的简单查询就是根据方法名来自动生成 SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称:

And findByLastnameAndFirstname  … where x.lastname = ?1 and x.firstname = ?2
Or  findByLastnameOrFirstname   … where x.lastname = ?1 or x.firstname = ?2
Is,Equals   findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between findByStartDateBetween  … where x.startDate between ?1 and ?2
LessThan    findByAgeLessThan   … where x.age < ?1
LessThanEqual   findByAgeLessThanEqual  … where x.age ⇐ ?1
GreaterThan findByAgeGreaterThan    … where x.age > ?1
GreaterThanEqual    findByAgeGreaterThanEqual   … where x.age >= ?1
After   findByStartDateAfter    … where x.startDate > ?1
Before  findByStartDateBefore   … where x.startDate < ?1
IsNull  findByAgeIsNull … where x.age is null
IsNotNull,NotNull   findByAge(Is)NotNull    … where x.age not null
Like    findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike  … where x.firstname not like ?1
StartingWith    findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %)
EndingWith  findByFirstnameEndingWith   … where x.firstname like ?1 (parameter bound with prepended %)
Containing  findByFirstnameContaining   … where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy findByAgeOrderByLastnameDesc    … where x.age = ?1 order by x.lastname desc
Not findByLastnameNot   … where x.lastname <> ?1
In  findByAgeIn(Collection ages)    … where x.age in ?1
NotIn   findByAgeNotIn(Collection age)  … where x.age not in ?1
TRUE    findByActiveTrue()  … where x.active = true
FALSE   findByActiveFalse() … where x.active = false
IgnoreCase  findByFirstnameIgnoreCase   … where UPPER(x.firstame) = UPPER(?1)
自定义SQL查询
@Transactional
@Modifying
@Query("update User u set u.userName = ?1 where u.id = ?2")
int modifyByIdAndUserId(String  userName, Long id);

你可能感兴趣的:(Spring Boot Jpa)