Yao*_*eng 109 java spring spring-data-jpa
Spring Data JPA支持使用规范计算实体.但它有没有办法使用方法名称解析来计算实体?假设我想要一种方法countByName来计算具有特定名称的实体,就像findByName获取具有特定名称的所有实体的方法一样.
Geo*_*lou 184
从Spring Data 1.7.1.RELEASE开始,你可以用两种不同的方式来做,
1)新方法,使用查询推导计数和删除查询.阅读本文,(例5).例,
public interface UserRepository extends CrudRepository<User, Integer> {
Long countByName(String name);
}
Run Code Online (Sandbox Code Playgroud)
2)旧方法,使用@Query注释.
例,
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=?1")
Long aMethodNameOrSomething(String name);
}
Run Code Online (Sandbox Code Playgroud)
或者也使用@Param注释,
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=:name")
Long aMethodNameOrSomething(@Param("name") String name);
}
Run Code Online (Sandbox Code Playgroud)
检查这个答案.
小智 17
只要您不使用1.4版本,就可以使用显式注释:
例:
@Query("select count(e) from Product e where e.area.code = ?1")
int countByAreaCode(String code);
Run Code Online (Sandbox Code Playgroud)
小智 13
工作示例
@Repository
public interface TenantRepository extends JpaRepository< Tenant, Long > {
List<Tenant>findByTenantName(String tenantName,Pageable pageRequest);
long countByTenantName(String tenantName);
}
Run Code Online (Sandbox Code Playgroud)
从 DAO 层调用
@Override
public long countByTenantName(String tenantName) {
return repository.countByTenantName(tenantName);
}
Run Code Online (Sandbox Code Playgroud)
L. *_*nda 11
JpaRepository还扩展了QueryByExampleExecutor.因此,您甚至不需要在界面上定义自定义方法:
public interface UserRepository extends JpaRepository<User, Long> {
// no need of custom method
}
Run Code Online (Sandbox Code Playgroud)
然后查询如下:
User probe = new User();
u.setName = "John";
long count = repo.count(Example.of(probe));
Run Code Online (Sandbox Code Playgroud)
我只使用了几周的时间,但我不认为这完全可能,但是您应该能够通过更多的努力获得相同的效果;只需自己编写查询并注释方法名称即可。它可能并不比自己编写方法简单多少,但在我看来它更干净。
编辑:现在可以根据DATAJPA-231
| 归档时间: |
|
| 查看次数: |
147158 次 |
| 最近记录: |