文章目录
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
4 Working with Spring Data Repositories
4.1 Core concepts
Repository–CrudRepository–PagingAndSortingRepository;
JpaRepository继承PagingAndSortingRepository、QueryByExampleExecutor。
Pageable,实现类PageRequest、QPageRequest;构造器构建。
Sort,构造器构造实例,参数Order(构造器)、Direction。NullHandling,null值策略。
4.2 Query methods
@EnableJpaRepositories,启用jpa;repository默认扫描当前包。
DSL方式命名查询方法。
4.3 Defining Repository Interfaces
4.3.2 Null Handling of Repository Methods
@NonNullApi;标记package,包内方法参数、返回值不可为nul
@NonNull/@Nullable;标记方法、返回值;
4.3.3 Using Repositories with Multiple Spring Data Modules
存在多个spring-data模块时,spring-data使用严格模式。通过repository继承类型、domain注解、启用注解basepackages属性判定归属模块(包)。
同一模块,多个数据源时;通过启用注解指定entityManagerFactoryRef、transactionManagerRef、basePackages。
mybatis多数据源,@MapperScan指定basePakages、sqlSessionFactoryRef。
domain可有多个模块的实体注解,以复用。
4.4 Defining Query Methods
DSL、注解定义query。
DSL命名规则、参数处理、返回类型包装
4.4.1 Query Lookup Strategies
@Enable${store}Repositories,queryLookipStrategy属性;Key枚举类:
- CREATE;根据方法名构建query
- USE_DECLARED_QUERY;根据注解构建query,无时抛异常
- CREATE_IF_NOT_FOUND;注解优先,默认
4.4.2 Query Creation
前缀:find…By、count…By(数量);方法名第一个By为分隔符
前缀关键词:Distinct、First[num]、Top[num]
逻辑:And、Or
关系表达式,列名[关键词],关键词为空则为等于:
- LessThan、GreaterThan;大小,
- LessThanEqual、GreaterThanEqual;
- Not;不等于,findBySexNot
- Is、Equals;等于
- After、Before;时间
- IsNull、NotNull;空、非空
- Like、NotLike;字符串
- StartingWith、EndingWith、Containing;字符串,自动拼接%
- IgnoreCase、AllIgnoreCase;不区分大小写
- In、NotIn、Between;
- TRUE、FALSE;为true、false;findByIsSuccessTrue
- OrderBy;排序,默认Asc
参数:Sort排序、Pageable分页排序;位于形参最后
分类,group by;已通过@ElementCollection、@Embeddable实现。
4.4.3 Property Expressions
通过address.zipCode查找person:
findByAddressZipCode();自动识别
findByAddress_ZipCode();手动区分,推荐
4.4.4 Sepecial parameter handling
Sort排序,Pageable分页;形参列表最后一个
Page findByLastname(String lastname, Pageable pageable);查找总条目数,may expensive
Slice findByLastname(String lastname, Pageable pageable);返回是否还有记录。
List findByLastname(String lastname, Pageable pageable);
List findByLastname(String lastname, Sort sort);
4.4.5 Limiting Query Results
关键词:Distinct、First[num]、Top[num];限制结果集
如果只返回一条记录,返回类型可包装,Optional<T>
限制结果集应用于分页、分片时,只限制当前分页、分片数据;而非总记录。
4.4.6 Streaming query results
返回结果包装为Stream。使用后需关闭,close()。
Stream findAll();
4.4.7 Async query results
@Async,异步返回。
@Async
Future findByFirstname(String firstname);
@Async
CompletableFuture findOneByFirstname(String firstname);
@Async
ListenableFuture findOneByLastname(String lastname);
5 JPA Repositories
5.1 Introduction
5.1.2 JavaConfig
@EnableJpaRepositories;重要属性:basePakages、EntityManagerFactoryRef、transactionManagerRef
装配:DataSource、PlatformTransactionManager、LocalContainerEntityManagerFactoryBean
5.2 Persisting Entities
保存entity时,调用EntityManager#persist()/merge()。
判定entity是否为new策略:
Id-Property inspection;default。id为null为new,否则old。
Implements Persistable/EntityInformation。
5.3 Query Methods
@NamedQuery,定义查询语句,标记entity类;属性:name、query
@Query,定义sql语句;属性:value、countQuery、nativeQuery(JPQL为false)
sql中引用参数:?1、:pName;Sort、Pageable参数置于形参列表最后,不需引用。
@Modifying,标记update、insert、delete类sql。提供事务?
@QueryHints,查询提示;value,forCounting
5.6 Query by Example
通过构建Example查询。
5.8 Locking
@Lock,设定锁模式;LockModeType:READ、WRITE、NONE、OPTIMISTIC*
对JpaRepository接口方法,可重新声明以修改锁模式;重新声明需符合dsl命名规则、或@Query指定sql。
乐观锁,必须使用java.persistence.Version注解标记字段,以实现乐观锁。
5.9 Auditing
https://www.jianshu.com/p/8d612d5fea38
@EnableJpaAuditing,启用;auditorAwareRef关联AuditorAware bean,提供用户。
@CreateBy、@LastModifiedBy;操作用户;
@CreatedTime、@LastModifiedTime;操作时间
@EntityListeners;entity变化监听,而后调用回调函数。
SpringBoot集成jpa
https://blog.youkuaiyun.com/a120805481/article/details/88071993
其他
- JPA方法名命名规则:https://www.jianshu.com/p/1d6f27f675bb
- 配置jpa hibernate其他参数,jpa.properties.hibernate.*
- springboot2配置jpa:https://blog.youkuaiyun.com/a120805481/article/details/88071993