1.依赖
org.springframework.boot
spring-boot-starter-data-jpa
2.查询
(1)基础查询前缀: findBy、findFirstBy、findAllBy、findDistinctBy、findTop5By
// 返回的是满足条件的第一个匹配项,此时等价于findFirstBy
Optional
findByUsername(String username); // 返回的是一个 List
,表示可能返回多条数据,此时等价于findAllBy List
findByUsername(String username); // 用于返回满足条件的第一个匹配项
Optional
findFirstByUsername(String username); // 用于返回满足条件的所有匹配项
List
findAllByUsername(String username); // 去重
List
findDistinctByLastName(String lastName); // 查询结果的前5条数据(5可以换成其它数值)
List
findTop5ByOrderByAgeDesc();
(2)使用关键字查询:And、Or、Between、LessThan、GreaterThan、Like、IsNull、IsNotNull、OrderBy
// 查询同时满足两个条件的数据
List
findByFirstNameAndLastName(String firstName, String lastName); // 查询满足两个条件中至少一个的数据
List
findByFirstNameOrLastName(String firstName, String lastName); // 查询在两个值之间的数据
List
findByAgeBetween(int minAge, int maxAge); // 查询小于指定值的数据
List
findByAgeLessThan(int maxAge); // 查询大于指定值的数据
List
findByAgeGreaterThan(int minAge); // 模糊查询,用于匹配指定模式的数据
List
findByLastNameLike(String pattern); // 查询指定属性为 null 的数据
List
findByLastNameIsNull(); // 查询指定属性不为 null 的数据
List
findByLastNameIsNotNull(); // 指定排序方式,用于按照指定属性进行升序或降序排序
List
findByLastNameOrderByFirstNameAsc(String lastName);
(3)集合查询:In、NotIn、Containing
// 查询某个属性值在给定集合中的数据
List
findByAgeIn(List ages); // 查询某个属性值不在给定集合中的数据
List
findByAgeNotIn(List ages); // 查询某个属性包含指定字符串的数据
List
findByAddressContaining(String keyword);
(4)排序查询:Asc、Desc
// 查询并按照指定属性进行升序排序
List
findByLastNameOrderByFirstNameAsc(String lastName); // 查询并按照指定属性进行降序排序
List
findByLastNameOrderByAgeDesc(String lastName); // 查询并按照多个属性进行排序
List
findByLastNameOrderByAgeAscFirstNameDesc(String lastName);
(5)分页查询
Page
findByLastName(String lastName, Pageable pageable);
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable;
Pageable pageable = PageRequest.of(0, 10); // 第一页,每页 10 条数据
Page
userPage = userRepository.findByLastName("Smith", pageable); List
userList = userPage.getContent(); // 获取查询结果的数据 long totalElements = userPage.getTotalElements(); // 获取总记录数
int totalPages = userPage.getTotalPages(); // 获取总页数
(6)自定义查询: >(大于)、<(小于)、=(等于)、!=
(不等于)、 LIKE
(模糊匹配)、 IN
(在某个范围内)、NOT IN
(不在某个范围内)、IS NULL
(为空)、IS NOT NULL
(不为空)、BETWEEN
AND
(在某个范围内)、IS TRUE
和 IS FALSE
(布尔值判断)
// 使用 SQL 查询语句,nativeQuery = true 表示使用本地 SQL 查询
@Query(value = "SELECT * FROM book WHERE page_count > :minPageCount", nativeQuery = true)
List
findBooksByMinPageCount(@Param("minPageCount") int minPageCount); // 使用 JPQL 查询语句,带参数
// >(大于)、<(小于)
@Query("SELECT u FROM User u WHERE u.age > :minAge AND u.age < :maxAge") List
findUsersByAgeRange(int minAge, int maxAge); // =(等于)
@Query("SELECT b FROM Book b WHERE b.author = :authorName")
List
findByAuthor(@Param("authorName") String authorName); // !
=
(不等于)@Query("SELECT b FROM Book b WHERE b.pageCount != :excludedPageCount") List
findBooksNotEqualTo(@Param("excludedPageCount") int excludedPageCount); //
LIKE
(模糊匹配)@Query("SELECT b FROM Book b WHERE b.title LIKE %:keyword%")
List
findBooksByTitleContaining(@Param("keyword") String keyword); //
IN
(在某个范围内)@Query("SELECT b FROM Book b WHERE b.author IN :authorList") List
findBooksByAuthorsIn(@Param("authorList") List authorList); //
NOT IN
(不在某个范围内)@Query("SELECT b FROM Book b WHERE b.author NOT IN :excludedAuthors")
ListfindBooksByAuthorsNotIn(@Param("excludedAuthors") List excludedAuthors);
//IS NULL
(为空)@Query("SELECT b FROM Book b WHERE b.author IS NULL")
ListfindBooksWhereAuthorIsNull(); //
IS NOT NULL
(不为空)
@Query("SELECT b FROM Book b WHERE b.author IS NOT NULL")
ListfindBooksWhereAuthorIsNotNull(); //
BETWEEN
AND
(在某个范围内)@Query("SELECT b FROM Book b WHERE b.pageCount BETWEEN :minPageCount AND :maxPageCount")
ListfindBooksByPageCountBetween(@Param("minPageCount") int minPageCount, @Param("maxPageCount") int maxPageCount);
//IS TRUE
和IS FALSE
(布尔值判断)@Query("SELECT b FROM Book b WHERE b.available = TRUE")
ListfindAvailableBooks(); @Query("SELECT b FROM Book b WHERE b.available = FALSE")
ListfindUnavailableBooks();
3.添加
4.批量添加
5.修改
6.删除
7.批量删除