关于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>