SpringData Jpa进阶使用
官方文档:
https://docs.spring.io/spring-data/jpa/docs/2.1.8.RELEASE/reference/html/
接口继承
public interface AccountRepository extends JpaRepository<Account, Integer>
JpaRepository接口中已经实现了常用的增删改查分页查询等功能
控制台显示SQL
application.properties 中配置spring.jpa.show-sql=true
自定义查询
关键字 | 意义 |
---|---|
And | 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd); |
Or | 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr); |
Between | 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min); |
LessThan | 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max); |
GreaterThan | 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min); |
IsNull | 等价于 SQL 中的 "is null",比如 findByUsernameIsNull(); |
IsNotNull | 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull(); |
NotNull | 与 IsNotNull 等价; |
Like | 等价于 SQL 中的 "like",比如 findByUsernameLike(String user); |
NotLike | 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user); |
OrderBy | 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user); |
Not | 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user); |
In | 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection <String > userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数; |
NotIn | 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection <String > userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数; |
自定义SQL @Query注解
占位符
public interface UserDao extends Repository<AccountInfo, Long> {
@Query("select a from AccountInfo a where a.accountId = ?1")
public AccountInfo findByAccountId(Long accountId);
@Query("select a from AccountInfo a where a.balance > ?1")
public Page<AccountInfo> findByBalanceGreaterThan(Integer balance,Pageable pageable);
}
参数名
public interface UserDao extends Repository<AccountInfo, Long> {
public AccountInfo save(AccountInfo accountInfo);
@Query("from AccountInfo a where a.accountId = :id")
public AccountInfo findByAccountId(@Param("id")Long accountId);
@Query("from AccountInfo a where a.balance > :balance")
public Page<AccountInfo> findByBalanceGreaterThan(@Param("balance")Integer balance,Pageable pageable);
}
更新操作
@Modifying
@Query("update AccountInfo a set a.salary = ?1 where a.salary < ?2")
public int increaseSalary(int after, int before);
直接使用Native SQL
设置属性 nativeQuery = true
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
User findByEmailAddress(String emailAddress);
}