SpringDataJpa自定义查询语句(JPQL)
前言
前面讲了SpringDataJpa持久层操作,请查看博主的SpringDataJpa系列文章。欢迎关注!
自定义查询语句(JPQL)
这种查询可以声明在Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更清晰,这是SpringDataJpa的特有实现
使用@Query自定义查询
- 前面介绍的获取数据的方式都没有使用到任何的HQL(Hibernate Query Language)语句,那些方法已经可以满足
很多需求,也有时候会觉得方法名太长不太方便,下面介绍一下使用Hql方式获取数据。
例如根据具体名字查询学生信息,在StudentRepository类中添加如下方法:
@Query("select s from Student s where s.studentName = ?1")
Student findByStudentName(String studentName);
在Controller调用,如下
/***
* http://localhost:8090/findStudentsByName?name=刘三
* @param name
* @return */
@RequestMapping("/findStudentsByName")
public Object findStudentBystudentName(String name) {
Student student = repository.findByStudentName(name);
return student;
}
@Query与 @Modifying的联合使用
这两个annotation一起声明,可定义个性化更新操作,例如只涉及某些字段更新时最为常用,示例如下:
- a.如果要修改学生姓名,首先在StudentRepository下添加如下代码:
@Transactional
@Modifying
@Query("update Student s set s.studentName=?1 where s.studentId=?2")
int setFixedStudentNameFor(String studentName,int studentId);
- b.在StudentController里面进行调用,代码如下:
/***
* http://localhost:8090/setStudent?name=lucy&id=2
* @param name
* @return */
@RequestMapping("/setStudent")
public Object setStudentByName(String name,int id) {
int i = repository.setFixedStudentNameFor(name,id);
Map<String,Object> map=new HashMap<String,Object>();
if(i>0) {
map.put("success", true);
}else {
map.put("success", false); }return map;
}
}
索引参数与命名参数
- 索引参数如下例代码所示,索引值从1开始,查询中 ”?X” 个数需要与方法定义的参数个数相一致,并且顺序也
要一致
@Transactional
@Modifying
@Query("update Student s set s.studentName=?1 where s.studentId=?2")
int setFixedStudentNameFor(String studentName,int studentId);
- 命名参数(推荐使用这种方式) 可以定义好参数名,赋值时采用@Param(“参数名”),而不用管顺序。如下所
示:- a.在StudentRepository里添加如下代码:
@Query("select s from Student s where s.studentName like %:studentName% ")
List<Student> queryByname(@Param(value = "studentName") String studentName);
- b.在StudentController里面进行调用,代码如下:
/***
* http://localhost:8090/queryByname?name=刘
* @param name
* @return */
@RequestMapping("/queryByname")
public Object queryByname(String name) {
List<Student> student = repository.queryByname(name);
return student;
}
好了到这里也该结束了,下一篇讲解–SpringDataJpa的原生Sql查询,各位要自己多动手才能学到真正的东西。加油各位
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97650.html