关于Mybatis动态赋值的三种方式 - Vence/personalKnowledge GitHub Wiki

##前言 在Mybatis经常会遇到sql语句中携带参数的问题,Mybatis提供了几种方式进行动态赋值,有些方式也是我在网上找寻无果后,查看源码所得的。

##动态赋值的三种方式

##使用_parameter

public Integer test(String email );

对应xml

 <select id="test" resultType="java.lang.Integer">  
    SELECT count(*) from TEUser 
    <if test="_parameter !=null">
    	where Email = #{0}
    </if>
</select>

这种方式只能确保在一个参数的时候有效的,当只有一个参数的时候_parameter就代表是动态的参数;但是如果有多个参数的时候,_paramter的类型就变成了包装类型, 当两个参数都为null,_paramter也不会为null,所以此时判定是无效的。

##使用Map 这个是万能的使用方式,不过麻烦是,你必须将参数全部包装在map里面; 调用的时候要将参数包装进入Map

public Integer test(Map map);

对应xml

 <select id="test" resultType="java.lang.Integer">  
    SELECT count(*) from TEUser 
    <if test="email !=null">
    	where Email = #{0}
    </if>
</select>

此时要保证map中有key 为 email的值。

##使用param1,param2... 这个是第一种方式的扩展,这种方式,就能轻松获取指定顺序的参数, _param后面跟的就是参数的序号,不过需要注意的是 与mybatis的参数#{0}从0开始排序不同, _param是从1开始排序的, 也就是说你要取第一个参数应该用 _param1 ;

public Integer test(String email , String name);

对应xml

 <select id="test" resultType="java.lang.Integer">  
    SELECT count(*) from TEUser 
    <if test="param1 !=null">
    	where Email = #{0}
    </if>
</select>
⚠️ **GitHub.com Fallback** ⚠️