一、参数的传递
-
使用?传递参数
public interface UserRepository extends JpaRepository<User, Long> { @Query("select u from User u where u.emailAddress = ?1") User findByEmailAddress(String emailAddress); }
-
使用:参数名传递参数
public interface UserRepository extends JpaRepository<User, Long> { /** * :后的名字是通过 @Param 指定的变量名 */ @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname") User findByLastnameOrFirstname(@Param("lastname") String lastname, @Param("firstname") String firstname); }
二、开启本地SQL查询
public interface UserRepository extends JpaRepository<User, Long> {
/**
* 设置 nativeQuery = true 来开启本地SQL查询
*/
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
三、使用 SpEL 表达式
public interface UserRepository extends JpaRepository<User,Long> {
/**
* 其中的 entityName 是指实体中使用 @Entity 注解指定的表名,但不支持使用 orm.xml 配置文件指定。
*/
@Query("select u from #{#entityName} u where u.lastname = ?1")
List<User> findByLastname(String lastname);
}
四、使用@Qurey进行增删改
interface UserRepository extends Repository<User, Long> {
/**
* 使用 @Modifying 注解添加该方法对增删改的支持
*/
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
}