美文网首页
SpringData JPA @Query 注解实现自定义查询方

SpringData JPA @Query 注解实现自定义查询方

作者: PC_Repair | 来源:发表于2019-08-09 20:59 被阅读0次

Query 注解

  • 只需要将 @Query 标记在继承了 Repository 的自定义接口的方法上,就不需要遵循查询方法命名规则。
  • 支持命名参数及索引参数的使用
  • 本地查询

案例

  • Employee 实体类
public class Employee {
    private  Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

(1)查询操作

  • 查询 ID 最大的员工信息
@Query("select o from Employee o where id=(select max(id) from Employee t1)")
Employee getEmployeeById();

注意: Query 语句中第一个 Employee 是类名。

  • 根据占位符进行查询

注意: 占位符从 1 开始

@Query("select o from Employee o where o.name=?1 and o.age=?2")
List<Employee> queryParams1(String name, Integer age);
  • 根据命名参数的方式
@Query("select o from Employee o where o.name=:name and o.age=:age")
List<Employee> queryParams2(@Param("name") String name, @Param("age") Integer age);
  • like 查询语句
@Query("select o from Employee o where o.name like %?1%")
List<Employee> queryLike1(String name);

(2)更新操作

  • 在 DAO 中定义方法根据 Id 来更新年龄(@Modifying 注解代表允许修改)
@Modifying
@Query("update Employee o set o.age = :age where o.id = :id")
void update(@Param("id") Integer id, @Param("age") Integer age);

(3)删除操作

@Modifying
@Query("delete from Employee o where o.id = :id")
void delete(@Param("id") Integer id);

(4)注意

执行更新或者删除操作是需要事物支持,所以通过 service 层来增加事物功能,在 update 方法上添加Transactional 注解。

本地查询

所谓本地查询,就是使用原生的 sql 语句进行查询数据库的操作。但是在 Query 中原生态查询默认是关闭的,需要手动设置为true:

@Query(nativeQuery = true, value = "select count(1) from employee")
long getCount();

参考文档:https://blog.csdn.net/HQZ820844012/article/details/80188742#pagingandsortingrepository%E6%8E%A5%E5%8F%A3

相关文章

网友评论

      本文标题:SpringData JPA @Query 注解实现自定义查询方

      本文链接:https://www.haomeiwen.com/subject/odekjctx.html