dao Interface继承Repository接口
可以直接继承Repository也可以继承下面的子接口
CrudRepository
(Spring Data提供)
继承Repository,提供增删改查方法,可以直接调用。
PagingAndSortingRepository
(Spring Data提供)
继承CrudRepository,增加了分页查询和排序两个方法
JpaRepository
(Spring Data JPA提供)
继承PagingAndSortingRepository,是针对JPA技术的接口,提供flush(),saveAndFlush(),deleteInBatch()等方法
继承后可以对数据库进行crud操作。
jpa查询Query的操作
1、解析方法名
持久层接口中定义如下:
| public interface UserRepository extends Repository<User, Long> { List<User> findByEmailAddressAndLastname(String emailAddress, String lastname); } |
将会解析为如下的query
| select u from User u where u.emailAddress = ?1 and u.lastname = ?2 |
解析时能被识别的keyword和包含这些keyword的方法会被解析成什么样的Query,如下表所示。
| Sample | JPQL snippet | |
| And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
| Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
| Between | findByStartDateBetween | … where x.startDate between 1? and ?2 |
| LessThan | findByAgeLessThan | … where x.age < ?1 |
| GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
| IsNull | findByAgeIsNull | … where x.age is null |
| IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
| Like | findByFirstnameLike | … where x.firstname like ?1 |
| NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
| OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
| Not | findByLastnameNot | … where x.lastname <> ?1 |
| In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1 |
| NotIn | findByAgeNotIn(Collection<Age> age) | … where x.age not in ?1 |
也可以使用@Query
@Repository
public interface ILoanCifPactDao extends JpaRepository<LoanCifPactVo, Serializable>,JpaSpecificationExecutor<LoanCifPactVo>{
@Query(nativeQuery=true,value="SELECT * FROM S_LOAN_CIF_PACT WHERE ID_NUM=?1 ORDER BY BEGIN_DATE " )
public List<LoanCifPactVo> findPactFixNday2day(String idnum);
}
注意:
1:方法的参数个数必须和@Query里面需要的参数个数一致。
2:如果是like,后面的参数需要前面或者后面加“%”
如果要生成更新类的Query语句,在@Query之前添加@Modifying即可。
| @Modifying @Query("update User u set u.firstname = ?1 where u.lastname = ?2") int setFixedFirstnameFor(String firstname, String lastname); |
注意:
1:方法的返回值应该是int,表示更新语句所影响的行数。
2:在调用的地方必须加事务,没有事务不能正常执行。
本文介绍了Spring Data JPA中的Repository接口及其子接口,并详细解释了如何通过方法名解析实现自定义查询,包括条件筛选、排序及使用@Query注解进行复杂查询。
6845

被折叠的 条评论
为什么被折叠?



