介绍@Query注释之前,先看看怎么利用@NamedQuery进行命名查询
1.现在实体类上定义方法已经具体查询语句
@Entity
@NamedQuery(name = "Task.findByTaskName",
query = "select t from Task t where t.taskName = ?1")
public class Task{
}
2.然后我们继承接口之后,就可以直接用这个方法了,它会执行我们定义好的查询语句并返回结果
public interface TaskDao extends JpaRepository<Task, Long> {
Task findByTaskName(String taskName);
}
试想一下,如果我们想自己定义执行查询,利用命名查询,显然不行,因为,会在实体类上写很多的@NamedQuery,这种情况的话,我们可以用@Query直接在方法上定义查询语句,例如这样
public interface TaskDao extends JpaRepository<Task, Long> {
@Query("select t from Task t where t.taskName = ?1")
Task findByTaskName(String taskName);
}
@Query上面的1代表的是方法参数里面的顺序,除了写hql,我们还可以写sql语句