Igo*_*hin 20 spring-data spring-data-jpa
考虑一下Spring Data Jpa存储库:
public interface UserRepository extends JpaRepository<User, Long> {
User findOneByDeletedIsFalseAndActivationKey(String activationKey);
List<User> findAllByDeletedIsFalseAndActivatedIsFalseAndCreatedDateBefore(DateTime dateTime);
User findOneByDeletedIsFalseAndLogin(String login);
User findOneByDeletedIsFalseAndEmail(String email);
}
Run Code Online (Sandbox Code Playgroud)
请注意每个方法中都有" DeletedIsFalse".有一种简单的方法可以缩短方法名称吗?喜欢ie:
@FullMethodName("findOneByDeletedIsFalseAndEmail")
User findOneByEmail(String email);
Run Code Online (Sandbox Code Playgroud)
Mak*_*min 34
使用defaultJava 8功能进行包装,就像这样:
// use findOneByEmail instead
User findOneByDeletedIsFalseAndEmail(String email);
default User findOneByEmail(String email) {
return findOneByDeletedIsFalseAndEmail(email);
}
Run Code Online (Sandbox Code Playgroud)
看一个例子.
现在您可以使用Java 8 default接口方法,如@Maksim Kostromin所述.但是春天没有这样的功能.
- 老答案
没有这样的方法.您可以为方法指定任何名称,并添加@Query带有参数值的注释,该参数值将所需的查询保存到数据库,如下所示:
@Query(value="select u from User u where u.deleted=false and u.email=:email")
User findOneByEmail(@Param("email")String email);
Run Code Online (Sandbox Code Playgroud)
或者,使用本机SQL查询:
@Query(value="SELECT * FROM users WHERE deleted=false AND email=?1", nativeQuery=true)
User findOneByEmail(String email);
Run Code Online (Sandbox Code Playgroud)
您还可以使用遵循命名约定的名称进行查询,因为@Query注释优先于方法名称的查询.
UPD:
来自Spring docs:
虽然获取从方法名称派生的查询非常方便,但是可能会面临这样的情况:方法名称会变得不必要地丑陋.因此,您可以通过命名约定使用JPA命名查询...或者使用@Query注释查询方法.
| 归档时间: |
|
| 查看次数: |
6344 次 |
| 最近记录: |