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);
}