关于Mybatis动态赋值的三种方式

Vence Wang edited this page Sep 2, 2015 · 1 revision

##前言 在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>
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.