java|java jpa如何自定义sql语句
目录
- java jpa自定义sql语句
- 1.多表关联查询,含条件
- 2.清空表
- 3.模糊查询
- 4.查询结果为VO
- 5.使用@Param注解注入参数
- jpa自定义sql查询结果
- 直接上代码
- 最后跑一下demo代码
java jpa自定义sql语句 本篇只是为了再次记录自己又学习了jpa的使用,框架原生的通过解析方法名多适用于单表操作,自定义的sql查询则可以解决所有问题,记录些自定义sql语法的记录,以便后续参照。
1.多表关联查询,含条件
@Query(value = "https://www.it610.com/article/SELECT b FROM QyVideo a JOIN YjQyXx b ONa.qyId = b.id AND a.cameraId = ?1")
2.清空表
@Transactional@Modifying@Query(value = "https://www.it610.com/article/truncate table yj_qy_xx", nativeQuery = true)
注:update、truncate或delete时必须使用@Modifying和@Transactional对方法进行注解,才能使得ORM知道现在要执行的是写操作。
3.模糊查询
@Query("select p from WhpzxryzsXxPo p where p.ryxm like concat('%',?1,'%') and p.cyyxqq >= ?2")
【java|java jpa如何自定义sql语句】
4.查询结果为VO
含两个实体类
@Query(value = "https://www.it610.com/article/SELECT new com.kun.aqsczt.vo.FxjzfbVo(u, seventinfo) FROM SSmsInfo u left join SEventInfo seventinfo on u.referId = seventinfo.eventId WHERE (:referType IS NULL OR :referType IS'' OR u.referType = :referType) AND (:isSend IS NULL OR :isSend IS '' OR u.isSend = :isSend) ")
5.使用@Param注解注入参数
分页查询
@Query(value = "https://www.it610.com/article/SELECT aFROM CEiWorkaccMaybe a" +"WHERE (:psnName IS NULL OR :psnName IS '' OR a.psnName LIKE %:psnName%) " +"AND (:commName IS NULL OR :commName IS '' OR a.commName LIKE %:commName%) " +"AND (:idCard IS NULL OR :idCard IS '' OR a.idCard LIKE %:idCard%) " +"AND (:doctorDateStart IS NULL OR :doctorDateStart IS '' OR a.doctorDate >= :doctorDateStart) " +"AND (:doctorDateEnd IS NULL OR :doctorDateEnd IS '' OR a.doctorDate <= :doctorDateEnd) ")PagegetSuspectedWorkAccidentVerification(@Param("psnName") String psnName,@Param("commName") String commName,@Param("idCard") String idCard,@Param("doctorDateStart") String doctorDateStart,@Param("doctorDateEnd") String doctorDateEnd,Pageable pageable);
无非是把日常的sql中的表名换成了对应的实体类名,接收参数适用 ?加上第几个参数的几。当然也可使用@Param注解注入参数,就变成了使用 :参数 名称接收。
jpa自定义sql查询结果 很多时候都会遇到自定义sql,自定义返回字段,而不是pojo类。这个情况要通过接口定义返回。
直接上代码
@Query(value = "https://www.it610.com/article/select m.field AS field,COUNT(m.field) AS size from MigrationObject m where m.xmlName = ?1 and m.groupName = ?2 group by m.field")ListgetKey(String xmlName, String groupName);
对于这种情况,只返回了两个字段,就需要定义一个接口来接收(注意AS别名的配置)
public interface WorkCenter { String getField(); String getSize(); }
最后跑一下demo代码
Listlist = migrationObjectRepository.getKey("EN_Work centerResource.xml","Key"); for (WorkCenter workCenter:list){System.out.println(workCenter.getField()); System.out.println(workCenter.getSize()); }
ARBPL以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
5
SPRAS
2
CANUM
2
ENDDA
1
WERKS
5
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树