java jpa如何自定义sql语句
程序员文章站
2022-04-10 12:39:06
目录java jpa自定义sql语句1.多表关联查询,含条件2.清空表3.模糊查询4.查询结果为vo5.使用@param注解注入参数jpa自定义sql查询结果直接上代码最后跑一下demo代码java...
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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
如何在SQL SERVER 2005存储过程中,使用循环语句
-
自定义存储过程的Sql语句
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
Java kafka如何实现自定义分区类和拦截器
-
数据库批量sql插入语句动态获取最新自增id问题如何解决?
-
探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句
-
关于如何修改一张表中所有行与选定字段的同sql多行语句的添加方法
-
mysql实战45讲读书笔记(一) 一条SQL查询语句是如何执行的
-
mybatis oracle proc 数据库测试没问题,java调用就异常 ORA-00900: 无效 SQL 语句
-
使用jdbc拼接条件查询语句时如何防止sql注入