最近需求复杂的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判断相关推荐

  1. SpringData JPA @Query动态SQL语句

    前言 这次有个需求,需要动态的sql语句去查询,但是@Query正常情况下SQL语句是写死的,在查找了很多资料后,想到了一个好的解决办法 思路 利用MYSQL的判断来拼接SQL语句 实现 先上代码 @ ...

  2. c++ 传入动态参数_一文了解Mybatis中动态SQL的实现

    一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...

  3. SQL 拼接语句输出_一文了解Mybatis中动态SQL的实现

    一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...

  4. Jpa操作数据库之动态SQL语句的使用

    第一次使用Jpa,之前都是使用的SSM,现在公司换框架为SpringBoot,随之持久层也换为了Jpa,个人感觉Jpa跟Hibernate使用有些相似,好了,废话不多说,上需求,一个表里包含字段[na ...

  5. MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合

    场景 在mapper接口层方法参数有id的数组和姓名的模糊搜索和类型的三个参数. 现在需要将这三个参数传递在动态sql的xml中接受并进行判断不为空. 然后查询数据库中记录在第一个参数id数组中的并且 ...

  6. jpa 动态sql拼接_MyBatis还是JPA?终于有答案了!

    原创:猿逻辑,欢迎分享,转载请保留出处. 对于一个和数据库打交道的程序员来说,很快会面临着一个艰难的选择.到底是选择MyBatis还是JPA呢? 很多人说,技术选择,都要根据需求来,这个没错.但是,除 ...

  7. 动态SQL的 if 条件判断

    错误方式一: 在mybatis的动态sql语句中使用<if>标签可以判断sql中的条件是否成立. <select id="getPerson" resultTyp ...

  8. dao层动态sql利器!数据持久化jpa插件spring-data-jpa-extra?Fenix!

    把hibernate.mybatis都整合到一个项目中,有没有觉得臃肿繁琐?!        我们知道,dao层,会用数据持久化框架,如hibernate.mybatis等,他们都实现了jpa规范.几 ...

  9. MyBatis list Contains MyBatis 动态SQL 判断List Contains

    MyBatis list Contains MyBatis 动态SQL 判断List Contains 一.情景描述 在使用MyBatis 动态SQL查询时,有时候需要判断集合中是否有某个元素,若存在 ...

最新文章

  1. Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AV
  2. ibatis解决sql注入问题 .
  3. 【通知】2020年有三AI-CV夏季划升级倒计时,最后两天
  4. [洛谷P4012] [网络流24题] 深海机器人问题
  5. linux网络编程之网络字节序、主机字节序、大端、小端
  6. 一个程序员的一些想法(一)
  7. 云图说 | 华为云医疗智能体智联大健康:AI医学影像
  8. plugin工程及与flutter工程通信原理
  9. 数据仓库整合各系统码表和参数表
  10. java实现二分排序算法
  11. 解决Windows10 ssh连接Linux服务器Unable to negotiate with xx.xx.xx.xx port xx: no matching key exchange meth
  12. 卸载mysql front_完全卸载mysql
  13. 如何突破思维局限去思考世界,去读读以下三个理论
  14. PB 各种小技巧(二)
  15. EXCEL中数据分析涉及的一些操作
  16. iOS对sqlite3进行封装
  17. 域控服务器怎么开策略,组策略(域和域服务的搭建)
  18. github访问不了怎么办
  19. 递归:昆虫繁殖C++实现
  20. 【干货】百度清风算法中标后我是如何恢复的

热门文章

  1. 【企业分析】搞定设计公司
  2. mysql explain解读
  3. 微信有多少服务器支撑,终于支持多设备同时在线 微信新版本详细体验
  4. fastips和nanoips哪个响应更快 Nano IPS和Fast IPS面板优缺点区别
  5. 电脑i7,10代i7电脑主机最佳配置
  6. 微信小程序5月带给我们的惊喜
  7. 天刀各大服务器位置,各司其职 天刀各门派各位置定位详解
  8. 如何阻止华为杀应用_华为手机“杀”后台严重受不了?别慌,这些小技巧就能轻松搞定...
  9. 【Hadoop集群】-集群搭建踩的那些坑之hadoop篇
  10. 解读:未来30年新兴科技趋势报告(AI Frist,IoT Second)