mybatis相关知识

<foreach /> 标签

  • 标签的属性
属性释义
collection需做foreach(遍历)的对象,作为入参时,list、array对象时,collection属性值分别默认用listarray代替,Map对象没有默认的属性值。但是,在作为入参时可以使用@Param(“keyName”)注解来设置自定义collection属性值,设置keyName后,listarray会失效;
item集合元素迭代时的别名称,该参数为必选项
index在list、array中,index为元素的序号索引。但是在Map中,index为遍历元素的key值,该参数为 可选项
open遍历集合时的开始符号,通常与close=")"搭配使用 可选项
close遍历集合时的结束符号,通常与open="("搭配使用,该参数为可选项
separator元素之间的分隔符,类比在IN()的时候,separator=",",最终所有遍历的元素将会以设定的(,)逗号符号隔开,该参数为可选项
  • collection属性值类型为Map
    • Mapper接口定义的方法:
void xxx(@Param("paramsMap") Map<String,String> map);
  • mapper.xml

    • 方式一:利用map的entrySet()方法
    		......
    		<insert id="XXX" parameterType="java.util.Map">
    		    INSERT INTO table(a, b)
    		    VALUES
    		    <foreach collection="paramsMap.entrySet()" open="(" separator="," close=")" index="key" item="val">
    		        #{key}, #{val}
    		    </foreach>
    		</insert>
    	</mapper>
    
    • 方式二:
    	......
    		<insert id="XXX" parameterType="java.util.Map">
    		    INSERT INTO table
    		    <foreach collection="paramsMap.keys" item="key" open="(" separator="," close=")">
    		        获取值:#{param[key]}
    		        键:#{key}
    		    </foreach>
    		    VALUES
    		    <foreach collection="paramsMap.value" item="val" open="(" separator="," close=")">
    		       值:#{val}
    		   </foreach>
    		</insert>
    	......
    

mapper.xml使用静态常量或方法

  • 方式一
    先看一下在网上找到的一种比较常见的方式:
    在这里插入图片描述按照上面的做法我试了,但是有一个问题,使用${} 的时候,无论我调用的是一个静态的常量字符串或者是调用一个静态方法返回一个字符串,到SQL拼装的时候都会给它当成 字段 处理,进而sql运行错误 – (错误:找不到这个字段)。
    于是想到用#{} 替代${} ,但是依旧在解析的时候会抛出异常 – (错误:找不到相关get方法),很明显当我用#{} 的时候mysql将里边的内容当作参数类中的属性处理了。

  • 方式二
    利用mybatis中的 bind标签:

      bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。
      也就是说可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值。
    
    • 拼装参数
    	<select id="getDataList" resultType="Data">
        <bind name="_dataName" value="'%' + dataName + '%'"/>
        select * from tbl_data where data_name like #{_dataName}
    </select>
    
    • 调用静态方法
    	<insert id="insertData" parameterType="Data">
        insert into tab_data
        ......
        <trim prefix="values (" suffix=")" suffixOverrides=",">
           <bind name="systemSign" value="@com.boo.common.config.BooConfig@getName()"/>
            #{systemSign},
            ......
    
    • 调用静态变量
      同上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值