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();
网友评论