这次项目用到一个and和or混用的场景 , 因为用到多个or(循环), 没想到好的办法

最终转换成用 IN实现:

场景:

用left join链接多个表, 多个条件and筛选, 其中状态(state)条件筛选出多个可选状态的条目,

本来想用and 和 or 但是 or的条件是个数组参数, 需要遍历states , 可能0个可能多个, 拼了半天没有成功 , 最后发现用 IN 和FOREACH就可以了

DAO层接口 :

List<OrderInfoForm> selectOrdersByStatesSelective(@Param(value="order")Order order,@Param(value="states")Integer[] states);

Mybatis实现:

<select id="selectOrdersByStatesSelective" resultMap="AllResultMap" >select <include refid="All_Column_List" />from order_listLEFT JOIN product_method ON product_method.`code` = order_list.purchase_methodLEFT JOIN product_color ON product_color.`code` = order_list.colorLEFT JOIN product_guarantee ON product_guarantee.`code` = order_list.guaranteeLEFT JOIN product_info ON order_list.product_id = product_info.idLEFT JOIN product_model ON product_info.model = product_model.`code`LEFT JOIN product_standard ON product_info.standard = product_standard.`code`LEFT JOIN product_state ON product_state.`code` = order_list.order_stateLEFT JOIN product_apperance ON product_apperance.`code` = order_list.apperanceLEFT JOIN product_brand ON product_brand.`code` = product_info.brand<where><if test="order.orderNum != null " >order_num like "%"#{order.orderNum,jdbcType=VARCHAR}"%"</if><if test="order.operator != null " >and operator like "%"#{order.operator,jdbcType=VARCHAR}"%"</if><if test="order.purchaseTime != null" >and purchase_time = #{order.purchaseTime,jdbcType=DATE}</if><if test="order.orderState != null" >and order_state = #{order.orderState,jdbcType=VARCHAR}</if><if test="order.serialNum != null" >and serial_num like "%"#{order.serialNum,jdbcType=VARCHAR}"%"</if><if test="states != null and states.length >0"><foreach collection="states" item="state" separator="," open=" and order_state in (" close=")">#{state,jdbcType=BIGINT}</foreach></if></where></select>

这里的重点是:

 <if test="states != null and states.length >0"><foreach collection="states" item="state" separator="," open=" and order_state in (" close=")">#{state,jdbcType=BIGINT}</foreach>
</if>

把多个state的or关系转化为 states in (state1,state2,state3...)

in中用foreach循环

Mybatis中and和循环or混用 (or转换成in)相关推荐

  1. 考研数据结构之串(4.4)——练习题之将串str中所有值为ch1的字符转换成ch2的字符(C表示)

    题目 将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做. 分析 扫描整个串,发现值为ch1的字符用值为ch2的字符覆盖即可. 代码 核心 ...

  2. SQL 把表中字段存储的逗号隔开内容转换成列表形式

    原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...

  3. c语言中ch1和ch2是什么意思,2020-05-26(C语言)1.将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做.2.逆转函数...

    //1.将串str中所有值为ch1的字符转换成ch2的字符,如果str为空串,或者串中不含值为ch1的字符,则什么都不做.2.逆转函数 include include define MAXLEN 25 ...

  4. JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式

    JS 使用正则匹配字符串中所有大括号包含的数据,转换成数组形式 .match(/{[^}{]*?}/g)

  5. x3m文件怎么转换成mp3_视频中的音频怎么单独提取出来转换成mp3格式

    视频格式中通常是包含着音频格式的,而在看视频时看见有喜欢的bgm或者片头曲片尾曲时想把其中的音频单独的提取出来怎么办呢?此时通常可以用一些音频转换器把你喜欢的这些音频片段单独的提取出来,接下来就教你怎 ...

  6. python中object转为float_object格式怎样无损转换成float64格式

    这次给大家带来object格式怎样无损转换成float64格式,object格式无损转换成float64格式的注意事项有哪些,下面就是实战案例,一起来看一下. 在数据处理过程中 比如从CSV文件中导入 ...

  7. ASP.Net中实现上传过程中将文本文件转换成PDF的方法

    iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...

  8. java中ofd文件转pdf_ofd格式如何转换成word

    OFD格式是和PDF格式一样的,对文档进行归档要求的一种格式,如果想要进行编辑和查看的话,都是需要相应的阅读器.编辑器的.当然,我想大部分人会和我一样,都会选择先去将OFD格式转换成WORD格式进行编 ...

  9. php把语音转成帧,视频中提取音频软件 怎样把视频中的音乐提取出来,视频转换成音频方法...

    很多时候下载了一个视频文件,但真正吸引到自己的却是视频中的音乐.甚至有时候并不是想要视频文件,而是想要视频中的声音.那怎样把视频格式转换成音频(WAV,m4a,amr,mp3,ra等)格式呢?一般常见 ...

最新文章

  1. 每日一皮:上线一切正常的顺畅感就是如此赏心悦目!
  2. 如何招聘一个优秀的产品经理?Google主管的六条心得
  3. ASP.Net_配置文件
  4. 用Axis创建的Webservice的集成与发布
  5. mysql select 反选_JQuery实现全选、全不选和反选功能
  6. advanced ip scanner —— 局域网下 ip 及设备的扫描
  7. 人之间的尊重是相互的_人与人之间要学会相互尊重
  8. 中望cad linux版本,中望CAD2021下载 中望CAD ZWCAD 2021 For Linux v5.0.1446 官方正式版(支持国产UOS系统) 下载-脚本之家...
  9. 用hyperf框架开发JsonRpc服务
  10. Java实现超市购物系统
  11. 6个免费视频、音频素材网,视频剪辑必备
  12. php呼叫平台,php – Twilio呼叫转发
  13. Visual Studio Code——做嵌入式C/C++开发常用的编辑器软件安装及基本使用总结
  14. redis通过key模糊搜索_Redis中关于Key的模糊查找
  15. 印度电影,又一次让我们不得不服
  16. vue日历排班组件_vue之手把手教你写日历组件
  17. Arduino UNO AT24C32进行字符串数据读写
  18. 【学习笔记·2】FOC
  19. 原生Poi导出Excel
  20. 1004: 惠民工程 (2013年中南大学研究生复试机试 )

热门文章

  1. zigbee 报警联动方案原理
  2. 算法第四版学习(chapter1.3)
  3. 基站网口损坏检查方法
  4. 系统分析与设计个人总结
  5. php 兼容火狐,HTML_总结CSS中火狐浏览器与IE浏览器的兼容代码,如何让你写的代码更兼容火狐 - phpStudy...
  6. 一个闲鱼挂机项目,让淘宝用户彻底“躺赢”
  7. 并行计算与并行编程课程内容介绍
  8. pythonb超分辨成像_深度原理与框架-图像超分辨重构-tensorlayer(示例代码)
  9. 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree
  10. JavaScript设计模式学习(四)单件(Singleton Pattern)