java jpa如何自定义sql语句
作者:java小白- 发布时间:2022-08-04 14:36:52
标签:java,jpa,自定义,sql
java jpa自定义sql语句
本篇只是为了再次记录自己又学习了jpa的使用,框架原生的通过解析方法名多适用于单表操作,自定义的sql查询则可以解决所有问题,记录些自定义sql语法的记录,以便后续参照。
1.多表关联查询,含条件
@Query(value = "SELECT b FROM QyVideo a JOIN YjQyXx b ON a.qyId = b.id AND a.cameraId = ?1 ")
2.清空表
@Transactional
@Modifying
@Query(value = "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")
4.查询结果为VO
含两个实体类
@Query(value = "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 = "SELECT a FROM 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) "
)
Page<CEiWorkaccMaybe> getSuspectedWorkAccidentVerification(
@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 = "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")
List<WorkCenter> getKey(String xmlName, String groupName);
对于这种情况,只返回了两个字段,就需要定义一个接口来接收(注意AS别名的配置)
public interface WorkCenter {
String getField();
String getSize();
}
最后跑一下demo代码
List<WorkCenter> list = 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
来源:https://blog.csdn.net/weixin_42209368/article/details/119649029


猜你喜欢
- Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基
- 布局文件activity_main.xml<RelativeLayout xmlns:android="http://sch
- jpa配置多数据源教程很多,在Springboot2之后有一些变化,来看一下。application.yml如下spring:
- 在开发的过程中,往往会需要在组件中添加一些按钮,用于执行一些自定义的操作。例如你有一个组件A,里面有一个List<Collider&g
- 简单工厂模式(Simple Factory),说他简单是因为我们可以将此模式比作一个简单的民间作坊,他们只有固定的生产线生产固定的产品。也可
- 本文实例总结了Android开发中Toast显示消息的方法。分享给大家供大家参考,具体如下:Android中提供一种简单的Toast消息提示
- 在android中做图像镜像有很多方法,今天算是学习了! 两种方法如下: //方法一 Matrix matrix = new Matrix(
- 先来简单说一下本文所要实现的功能:用户在浏览网页的时候,长按某一区域,识别如果是图片,则弹出弹框,出现保存图片的功能。同时识别图片是否是二维
- 业务场景我们知道在使用PageHelper分页插件时,会对执行PageHelper.startPage(pageNum, pageSize)
- 创建普通Maven工程导入所需依赖坐标:<dependencies> <!-- https://
- 简单实现了下:import javax.crypto.BadPaddingException;import javax.crypto.Cip
- 简介MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)
- 目录说明使用常见问题No such instance field: 'logger2'说明logback作为log4j的替代
- static目的java中的static关键字主要用于内存管理。static范围使用范围:java static关键字可以用在变量、方法、代
- 本文以实例形式展示了Android实现Activity界面切换添加动画特效的方法,对于Android程序设计人员来说有很好的参考借鉴价值。具
- 如下所示://读取json文件地址 /* String path = getClass().getClassLoader().g
- 写在前面现在,越来越多的App里面使用了模糊效果,这种模糊效果称之为高斯模糊。大家都知道,在Android平台上进行模糊渲染是一个相当耗CP
- //字符串的内存驻留机制 public static v
- 一、简介(1)、MySQL是一个关系型数据库系统,是如今互联网公司最常用的数据库和最广泛的数据库。为服务端数据库,能承受高并发的访问量。(2
- 指定创建派生类实例时应调用的基类构造函数;调用基类上已被其他方法重写的方法。注意:不能从静态方法中使用base关键字,base关键字只能在实