mybatis分割字符串并循环,实现in多个参数的操作

mybatis分割字符串并循环,实现in多个参数

mybatis xml代码:

  <select id="selectInXh" resultMap="BaseResultMap" parameterType="java.lang.String">
    select *
    from carinfo
    where
    xh in
 <if test="param1 != null and param1 != ''">
  <foreach item="item" index="index" collection="param1.split(',')" open="(" separator="," close=")">
   #{item}
  </foreach>
 </if>
  </select>

mybatis sql打印:

==>  Preparing: select * from carinfo where xh in ( ? , ? )
==> Parameters: 1(String), 2(String)

mybatis多参数使用方法且其中有的参数是多个值使用in查询

1.当只有一个参数时且参数类型是List

List<AnalysisInfo> listInfo(@Param("orderIds") List<Integer> orderIds);

我这里对参数重命名为"orderIds",所以下面foreach中collection="orderIds",如果未重命名则foreach中collection="list"

<select id="listInfo" resultType="com.ieou.retail.module.H5.dto.AnalysisInfo">
       select materials_name as materialsName,sum(num) as totalNum,
       sum(price) as totalSale
       from sales_order_detail
       where shipment_result = 'SUCCESS' and refunds_time is null
       and sales_order_id in
       <foreach collection="orderIds" index="index" item="item" open="(" separator="," close=")">
           #{item}
      </foreach>
      group by materials_id order by totalNum desc limit 5
  </select>

2. 当只有一个参数时且参数类型是Array

List<AnalysisInfo> listInfo(Long[] orderIds);

如果参数类型是Array则collection属性为array

<select id="listInfo" resultType="com.ieou.retail.module.H5.dto.AnalysisInfo">
       select materials_name as materialsName,sum(num) as totalNum,
       sum(price) as totalSale
       from sales_order_detail
       where shipment_result = 'SUCCESS' and refunds_time is null
       and sales_order_id in
       <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
           #{item}
      </foreach>
      group by materials_id order by totalNum desc limit 5
  </select>

3.注意当查询的参数有多个时,例如

List<AnalysisInfo> listInfo(List<Integer> orderIds, Integer num);

这种情况下传参要使用Map方式,这样在collection属性可以指定名称

Map<String, Object> params = new HashMap<>();
params.put("orderIds",orderIds);
params.put("num",num);
List<AnalysisInfo> listInfo(params);

XML如下:

<select id="listInfo" resultType="com.ieou.retail.module.H5.dto.AnalysisInfo">
    select materials_name as materialsName,sum(num) as totalNum,
    sum(price) as totalSale
    from sales_order_detail
    where shipment_result = 'SUCCESS' and refunds_time is null and num = #{num}
    and sales_order_id in
    <foreach collection="orderIds" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
    group by materials_id order by totalNum desc limit 5
</select>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis传递多个参数的三种实现方法

    方案一 Dao层的函数方法 1 Public User selectUser(String name,String area); 对应的Mapper.xml <select id=" selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,

  • Mybatis中传递多个参数的4种方法总结

    前言 现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. 下面给大家总结了以下几种多参数传递的方法. 方法1:顺序传参法 #{}里面的数字代表你传入参数的顺序. 这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错. 方法2:@Param注解传参法 #{}里面的名称对应的是注解 @Param括号里面修饰的名称. 这种方法在参数不多的情况还

  • mybatis使用foreach语句实现IN查询(三种)

    foreach语句中, collection属性的参数类型可以使:List.数组.map集合 collection: 必须跟mapper.java中@Param标签指定的元素名一样 item : 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样. index :表示在迭代过程中每次迭代到的位置(下标) open :前缀, sql语句中集合都必须用小括号()括起来 close :后缀 separator :分隔符,表示迭代时每个元素之间以什么分隔 Mybati

  • mybatis分割字符串并循环,实现in多个参数的操作

    mybatis分割字符串并循环,实现in多个参数 mybatis xml代码: <select id="selectInXh" resultMap="BaseResultMap" parameterType="java.lang.String"> select * from carinfo where xh in <if test="param1 != null and param1 != ''"> &

  • JS分割字符串并放入数组的函数

    复制代码 代码如下: var InterestKeywordListString = $("#userInterestKeywordLabel").html(); var InterestKeywordListArr = []; var t = ''; for (var i = 0; i < InterestKeywordListString.length; i++) { var tmp = InterestKeywordListString.charAt(i); if (tmp

  • js拆分字符串并将分割的数据放到数组中的方法

    本文实例讲述了js拆分字符串并将分割的数据放到数组中的方法.分享给大家供大家参考.具体实现方法如下: var splitArray = new Array(); var string="太平洋.大西洋.印度洋.北冰洋"; var regex = /./; splitArray=string.split(regex); for(i=0; i < splitArray.length; i++){ document.write(splitArray[i] + "<br&

  • JavaScript搜索字符串并将搜索结果返回到字符串的方法

    本文实例讲述了JavaScript搜索字符串并将搜索结果返回到字符串的方法.分享给大家供大家参考.具体如下: javascript操作字符串带有一个match方法用于搜索字符串,如果找到指定的字符串则返回搜索字符串,如果未找到则返回null,match方法区分大小写 <!DOCTYPE html> <html> <body> <script> var str="Hello world!"; document.write(str.match

  • C#实现根据字节数截取字符串并加上省略号的方法

    本文实例讲述了C#按字节数截取字符串并在后面加上省略号...的方法,这是一个自定义的C#函数,函数的使用说明如下: <param name="origStr">原始字符串</param> <param name="endIndex">提取前endIdex个字节</param> <returns></returns> 函数代码如下: public static string GetSubStrin

  • java输入字符串并将每个字符输出的方法

    如下所示: import java.util.Scanner; public class Main{ public static void main(String[] args){ int i,len; String str; Scanner in = new Scanner(System.in); str = in.next(); len = str.length(); //求出长度 for (i=0; i<len; i++){ System.out.println(str.charAt(i)

  • python 使用正则表达式按照多个空格分割字符的实例

    程序代码如下 import os import re os.system("nmap -sP 192.168.3.0/24") //扫描IP mac = os.popen("cat /proc/net/arp ").readlines() //按行读取 length = len(mac) for i in range(1,length): b= re.split(r" +",mac[i]) //按照多个空格分割 if(b[2]=='0x2'):

  • java eclipse 整个项目或包查找只定字符串并替换操作

    java eclipse经常会用到整个类进行查找,ctrl+f,然后replaceall(XX,toXX).但是最近要对webservice上的项目进行检查,里面的运行程序不能有system.out.println这样的语句,因为服务器上的控制台输出会存储到一个指定路径的文件里,超过9gtomcat就会运行变慢,甚至挂掉.所以这里要用,ctrl+h,开启全项目或者全包搜索,用法如下: 1.选中项目名称或者包名称位置,ctrl+h 2弹出的界面中选取,file Search,在其中输入要查找的字符

  • MyBatis中使用foreach循环的坑及解决

    目录 使用foreach循环的坑 正确写法为 忽现的Mybatis foreach失效记录 解决方案 使用foreach循环的坑 我们首先看一段MyBatis中使用foreach循环的sql: SELECT * FROM table where id in <foreach item="item" collection="ids1" open="(" close=")" index="0" separ

  • python封装json格式字符串并处理单双引号问题

    在使用python做web服务的时候会有数据交互的情况,大多数目前会采用json格式的数据来交互,接收者接收到标准的json格式数据后,会比较方便解析数据. 我这里有一个场景是将三个数组类型的数据封装成json格式的字符串并发送给消费方,三个数组类型的数据是: print(boxes) print(scores) print(txts) #以下是打印结果 #第一个: [array([[292., 294.], [331., 293.], [349., 848.], [309., 850.]],

随机推荐