SpringDataJpa原生SQL查询
前言
今天为大家分享:SpringDataJpa原生SQL查询。
前面讲了SpringDataJpa自定义查询语句(JPQL),请查看博主的SpringDataJpa系列文章。欢迎关注!
正题
一些比较复杂的关联查询要怎么实现呢,JPA的处理方法是:利用原生的SQL命令来实现那些复杂的关联查询,通
过设置nativeQuery = true 来设置开启使用数据库原生SQL语句。下面就在上一个案例的基础上实现原生sql的增删
改查,代码如下。
a.首先在StudentRepository里添加如下方法(请查阅博主得历史文章)
//利用原生的SQL进行查询操作
@Query(value = "select s.* from studenttb s where s.student_name=?1", nativeQuery = true)
public List<Student> findStudentByName(String name);
//利用原生的SQL进行删除操作
@Query(value = "delete from studenttb where student_id=?1 ", nativeQuery = true)
@Modifying
@Transactional
public int deleteStudentById(int uid);
//利用原生的SQL进行修改操作 @Query(value = "update studenttb set student_name=?1 where student_id=?2 ", nativeQuery = true)
@Modifying
@Transactional
public int updateStudentName(String name,int id);
//利用原生的SQL进行插入操作
@Query(value = "insert into studenttb(student_name,student_age) value(?1,?2)", nativeQuery = true)
@Modifying
@Transactional
public int insertStudent(String name,int age);
@Query(value=" SELECT * FROM studenttb WHERE STUDENT_NAME LIKE %:name% ",nativeQuery=true)
List<Student> queryBynameSQL(@Param(value = "name") String name);
b.在StudentController里面进行调用以上方法,代码如下:
//原生sql的调用
/***
* http://localhost:8090/findStudentByName?name=刘一
* @param name
* @return */
@RequestMapping("/findStudentByName")
public Object findStuByName(String name) {
List<Student> student = repository.findStudentByName(name);
return student;
}
/***
* http://localhost:8090/deleteStudentById?id=刘
* @param name
* @return */
@RequestMapping("/deleteStudentById")
public Object deleteStudentById(int id) {
int i = repository.deleteStudentById(id);
Map<String,Object> map=new HashMap<String,Object>();
if(i>0) {
map.put("success", true);
} else {
map.put("success", false);
}
return map;
}
/***
* http://localhost:8090/updateStudentName?name=Tom&id=1
* @param name
* @return */
@RequestMapping("/updateStudentName")
public Object updateStudentName(String name,int id) {
int i = repository.updateStudentName(name,id);
Map<String,Object> map=new HashMap<String,Object>();
if(i>0) {
map.put("success", true);
} else {
map.put("success", false);
}
return map;
}
/***
* http://localhost:8090/insertStudent?name=xiao&age=18
* @param name
* @return */
@RequestMapping("/insertStudent")
public Object insertStudent(String name,int age) {
int i = repository.insertStudent(name,age);
Map<String,Object> map=new HashMap<String,Object>();
if(i>0) {
map.put("success", true);
} else {
map.put("success", false);
}
return map;
}
/***
* http://localhost:8090/queryBynameSQL?name=刘
* @param name
* @return */
@RequestMapping("/queryBynameSQL")
public Object queryBynameSQL(String name) {
List<Student> student= repository.queryBynameSQL(name);
return student;
}
运行效果请各位自行测试。
好了到这里也该结束了,下一篇讲解–SpringDataJpa自定义投影映射,各位要自己多动手才能学到真正的东西。加油各位
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!