《Spring Data JPA官方文档》_笔记


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.csdn.net/a120805481/article/details/88071993
其他

  1. JPA方法名命名规则:https://www.jianshu.com/p/1d6f27f675bb
  2. 配置jpa hibernate其他参数,jpa.properties.hibernate.*
  3. springboot2配置jpa:https://blog.csdn.net/a120805481/article/details/88071993
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值