JPA的动态SQL IF判断
最近需求复杂的sql,使用JPA的ORM不太好解决
学习了JPA的IF判断,来处理
@Query(value = "select pr.*\n" +"from project_roster pr\n" +"left join exam_position ep on pr.id = ep.project_roster_id\n" +"left join online_exam_position oep on pr.id = oep.project_roster_id\n" +"LEFT JOIN school sch on sch.id = pr.school_id\n" +"where ep.project_roster_id is NULL\n" +"AND oep.project_roster_id is null\n" +"AND pr.paid = true\n" +"AND if(?1 is not null,pr.form_id=?1,1=1)" +"AND if(?2 is not null,sch.region=?2,1=1)" +"AND if(?3 is not null,sch.city_id=?3,1=1)" +"AND if(?4 is not null,pr.school_id=?4,1=1)" +"AND if(?5 is not null,pr.name=?5,1=1)", nativeQuery = true)Page<ProjectRoster> noExam(Long formId,Integer region,Long cityId,Long schoolId,String studentName, Pageable pageable);
讲解一下jpa中的 sql判断使用
1.模板
@Query(value = "select * from xxx where if(?1 !='',x1=?1,1=1) and if(?2 !='',x2=?2,1=1) and if(?3 !='',x3=?3,1=1) ",nativeQuery = true)
List<XXX> find(String X1,String X2,String X3);
2.模板使用
①?1 ?2 ?3 分别代表你传进来的参数第一二三位
②x1 x2 x3 分别代表的数据库字段名(别真的写成x1 x2)③ if(?3 !='',x3=?3,1=1) 你可以看成三目运算符
(对比语句 ,ture的话走这里 ,false走这里)所以就可以很多种写法
(?1 is not null , 字段 = ?1, 1=1)
(?1 !=' ' , 字段 = ?1, 1=1)
(?1 is null , 字段 = ?1, 1=1)
(?1 == ' ' , 字段 = ?1, 1=1)用法就是看自己的需求其中?1 ?2 ?3 也可以有别的写的:字段 其他地方不变
例如select * from xxxwhere form_id = :formId
作为if语句( :formId == ' ' , 字段 = :formId, 1=1)参数多的情况下,可以使用Param指定名称
@Param("formId ")Integer formId )例如
+ "WHERE IF (:byname is not null, c.byname LIKE CONCAT('%',:byname,'%') , 1 = 1) and IF (:isMember is not null, c.is_member = :isMember , 1 = 1) and IF (:isBlacklist is not null, c.is_blacklist = :isBlacklist , 1 = 1) and "
+ "IF (:phone is not null, c.phone = :phone , 1 = 1)"
+ "GROUP BY c.id LIMIT :PageOne,:PageSize",nativeQuery=true)
List<Map<String, Object>> countByQuery(@Param("byname") String byname,@Param("isMember") Integer isMember,@Param("isBlacklist") Integer isBlacklist,@Param("phone") String phone,@Param("PageOne") Integer PageOne, @Param("PageSize")Integer PageSize);
JPA的动态SQL IF判断相关推荐
- SpringData JPA @Query动态SQL语句
前言 这次有个需求,需要动态的sql语句去查询,但是@Query正常情况下SQL语句是写死的,在查找了很多资料后,想到了一个好的解决办法 思路 利用MYSQL的判断来拼接SQL语句 实现 先上代码 @ ...
- c++ 传入动态参数_一文了解Mybatis中动态SQL的实现
一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...
- SQL 拼接语句输出_一文了解Mybatis中动态SQL的实现
一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...
- Jpa操作数据库之动态SQL语句的使用
第一次使用Jpa,之前都是使用的SSM,现在公司换框架为SpringBoot,随之持久层也换为了Jpa,个人感觉Jpa跟Hibernate使用有些相似,好了,废话不多说,上需求,一个表里包含字段[na ...
- MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合
场景 在mapper接口层方法参数有id的数组和姓名的模糊搜索和类型的三个参数. 现在需要将这三个参数传递在动态sql的xml中接受并进行判断不为空. 然后查询数据库中记录在第一个参数id数组中的并且 ...
- jpa 动态sql拼接_MyBatis还是JPA?终于有答案了!
原创:猿逻辑,欢迎分享,转载请保留出处. 对于一个和数据库打交道的程序员来说,很快会面临着一个艰难的选择.到底是选择MyBatis还是JPA呢? 很多人说,技术选择,都要根据需求来,这个没错.但是,除 ...
- 动态SQL的 if 条件判断
错误方式一: 在mybatis的动态sql语句中使用<if>标签可以判断sql中的条件是否成立. <select id="getPerson" resultTyp ...
- dao层动态sql利器!数据持久化jpa插件spring-data-jpa-extra?Fenix!
把hibernate.mybatis都整合到一个项目中,有没有觉得臃肿繁琐?! 我们知道,dao层,会用数据持久化框架,如hibernate.mybatis等,他们都实现了jpa规范.几 ...
- MyBatis list Contains MyBatis 动态SQL 判断List Contains
MyBatis list Contains MyBatis 动态SQL 判断List Contains 一.情景描述 在使用MyBatis 动态SQL查询时,有时候需要判断集合中是否有某个元素,若存在 ...
最新文章
- Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AV
- ibatis解决sql注入问题 .
- 【通知】2020年有三AI-CV夏季划升级倒计时,最后两天
- [洛谷P4012] [网络流24题] 深海机器人问题
- linux网络编程之网络字节序、主机字节序、大端、小端
- 一个程序员的一些想法(一)
- 云图说 | 华为云医疗智能体智联大健康:AI医学影像
- plugin工程及与flutter工程通信原理
- 数据仓库整合各系统码表和参数表
- java实现二分排序算法
- 解决Windows10 ssh连接Linux服务器Unable to negotiate with xx.xx.xx.xx port xx: no matching key exchange meth
- 卸载mysql front_完全卸载mysql
- 如何突破思维局限去思考世界,去读读以下三个理论
- PB 各种小技巧(二)
- EXCEL中数据分析涉及的一些操作
- iOS对sqlite3进行封装
- 域控服务器怎么开策略,组策略(域和域服务的搭建)
- github访问不了怎么办
- 递归:昆虫繁殖C++实现
- 【干货】百度清风算法中标后我是如何恢复的
热门文章
- 【企业分析】搞定设计公司
- mysql explain解读
- 微信有多少服务器支撑,终于支持多设备同时在线 微信新版本详细体验
- fastips和nanoips哪个响应更快 Nano IPS和Fast IPS面板优缺点区别
- 电脑i7,10代i7电脑主机最佳配置
- 微信小程序5月带给我们的惊喜
- 天刀各大服务器位置,各司其职 天刀各门派各位置定位详解
- 如何阻止华为杀应用_华为手机“杀”后台严重受不了?别慌,这些小技巧就能轻松搞定...
- 【Hadoop集群】-集群搭建踩的那些坑之hadoop篇
- 解读:未来30年新兴科技趋势报告(AI Frist,IoT Second)