SpringDataJpa原生SQL查询

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 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 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 = 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 map=new HashMap(); 
    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 map=new HashMap(); 
    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 map=new HashMap(); 
    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= repository.queryBynameSQL(name); 
    return student; 
}

运行效果请各位自行测试。


好了到这里也该结束了,下一篇讲解–SpringDataJpa自定义投影映射,各位要自己多动手才能学到真正的东西。加油各位


最后

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!


你可能感兴趣的:(SpringDataJpa系列,为霞而作)