美文网首页
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