SpringData-3 @Query与@Modifying注解
2017-04-09 21:57
260 查看
1. @Query注解
/** * 在Repository子接口中声明方法规范: * 1. 不是随便声明的,而需要符合一定的规范 * 2. 查询方法以find | read | get开头 * 3. 涉及条件查询时,条件的属性用条件关键字连接 * 4. 要注意的是:条件属性首字母需要大写 * 5. 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性 * 若需要使用级联属性,则属性之间使用_强制进行连接 */ public interface PersonRepository extends Repository<Person, Integer> { /** * 问题:查询ID值最大的Person时,使用命名查询无法实现,需要借助于@Query注解来实现 * 使用@Query注解可以自定义JPQL语句以实现更为灵活的查询 */ @Query("SELECT p FROM Person p WHERE p.id = (SELECT max(p2.id) FROM Person p2)") Person getMaxIdPerson(); // 参数传递方式1:使用占位符的方式 @Query("SELECT p FROM Person p WHERE p.name = ?1 AND p.email = ?2") List<Person> testQueryAnnotationParams1(String name, String email); // 参数传递方式2:使用命名参数的方式 @Query("SELECT p FROM Person p WHERE p.name = :name AND p.email = :email") List<Person> testQueryAnnotationParams2(@Param("email") String email, @Param("name") String name); // 关于LIKE关键字:SpringData允许在占位符或命名参数上添加%% @Query("SELECT p FROM Person p WHERE p.name LIKE %?1% OR p.email LIKE %?2%") List<Person> testQueryAnnotationLikeParams1(String name, String email); @Query("SELECT p FROM Person p WHERE p.name LIKE %:name% AND p.email LIKE %:email%") List<Person> testQueryAnnotationLikeParams2(@Param("email") String email, @Param("name") String name); // 关于本地SQL查询:设置nativeQuery=true即可使用原生的SQL进行查询 @Query(value="SELECT count(id) FROM SPIRINGDATA_PERSONS", nativeQuery=true) long getTotalCount(); }
2. @Modifying注解
/** * 在Repository子接口中声明方法规范: * 1. 不是随便声明的,而需要符合一定的规范 * 2. 查询方法以find | read | get开头 * 3. 涉及条件查询时,条件的属性用条件关键字连接 * 4. 要注意的是:条件属性首字母需要大写 * 5. 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性 * 若需要使用级联属性,则属性之间使用_强制进行连接 */ public interface PersonRepository extends Repository<Person, Integer> { /** * 可以通过自定义的JPQL完成UPDATE和DELETE操作,注意JPQL不支持INSERT操作 * * 在@Query注解中编写JPQL语句,但必须使用@Modifying注解来通知SpringData这是UPDATE或DELETE操作 * * 注意: * 1. 方法的返回值应该为int,表示更新语句所影响的行数 * 2. UPDATE或DELETE操作必须使用事务,此时需定义Service层,并在其方法上添加@Transactional注解 * * 默认情况下,SpringData每个方法上均有事务,但其是只读事务,不能完成修改操作 * * @param id * @param email */ @Transactional @Modifying @Query("UPDATE Person p SET p.email = :email WHERE p.id = :id") void updatePersonEmail(@Param("id") Integer id, @Param("email") String email); }
相关文章推荐
- jpa学习5--spring data jpa 中的JpaRepository 使用 @Query 注解
- Spring data JPA中@Query 注解
- Spring Data JPA 常用注解 @Query、@NamedQuery
- @Query注解的用法(Spring Data JPA)
- @Query注解的用法(Spring Data JPA)
- Spring data jpa 之 Query注解
- Spring Data JPA 常用注解 @Query、@NamedQuery
- Spring-Data-JPA @Query注解 Sort排序
- SpringData JPA @query注解使用原生代码报错问题
- @Query注解的用法(Spring Data JPA)
- spring-data-jpa 的@Query注解的使用
- Spring data JPA中@Query 注解
- Spring Data JPA Specification Query
- org.springframework.dao.DataAccessResourceFailureException: could not execute query; nested exceptio
- 简化MongoAPI(spring-data-mongo)第三部分----Criteria和Query对象的使用
- org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exc
- Spring Data JPA教程, 第五部分: Querydsl(未翻译)
- Spring Data JPA 常用注解 @Query、@NamedQuery
- 关于$.ajax中data字段的整理--包括json转换和spring注解
- Spring Data jpa 中@Column 注解解释