Rob*_*rto 0 spring repository spring-data-jpa
spring+jpa(repositories) 实体有应用:
@Entity
@Getter
@Setter
@NoArgsConstructor
public class User{
private int id;
private String name;
private String surname;
private int age;
}
Run Code Online (Sandbox Code Playgroud)
因此,我的存储库如下所示:
@Repository
public interface UserRepository extends CrudRepository<User, Integer>{
public List<User> findUsersByNameAndAge(String name, int age);
public List<User> findUsersByNameAndSurname(String name, String surname);
}
Run Code Online (Sandbox Code Playgroud)
在我真正的生产代码中,参数太多,所以这个方法名太长而且不舒服。有没有办法从长方法名称中创建舒适的选项,例如仅查找?
小智 6
使用默认的Java 8 特性进行包装:
例如 :
interface UserRepository extends JpaRepository<User, Long> {
// don't use that crazy long method! use getByEmail instead
User findFirstByEmailContainsIgnoreCaseAndField1NotNullAndField2NotNullAndField3NotNullAndField4NotNullAndField5NotNullAndField6NotNull(final String email);
default User getByEmail(final String email) {
return findFirstByEmailContainsIgnoreCaseAndField1NotNullAndField2NotNullAndField3NotNullAndField4NotNullAndField5NotNullAndField6NotNull(email);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到完整的参考:https : //github.com/daggerok/spring-data-examples/blob/master/shadov/src/main/java/daggerok/ShadovApplication.java
或者,您可以为方法指定任何名称并添加带有参数值的注释@Query,该参数值将所需的查询保存到数据库中,如下所示:
@Query(value="select u from User u where u.deleted=false and u.email=:email")
User findOneByEmail(@Param("email")String email);
or, with native sql query:
@Query(value="SELECT * FROM users WHERE deleted=false AND email=?1", nativeQuery=true)
User findOneByEmail(String email);
Run Code Online (Sandbox Code Playgroud)
您还可以使用遵循查询命名约定的名称,因为 @Query 注释将优先于方法名称的查询。
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |