Mybatis Mapper 中如何传递多个参数

李经国
2023-12-01

一、DAO 层的函数

public User selectUser(String name,String account);

对应的 xml:

<select id="selectUser" resultMap="ResultMap">
select * from user 
where name = #{0} 
and account = #{1}
</select>

#{0}代表接收的是 dao 层中的第一个参数,#{1}代表 dao 层中第二参数,更多参数一直往后加即可。

二、使用 @param 注解:

user selectuser(@param(“name”) string name,
		@param(“account”) string account);
 

然后,就可以在 xml 像下面这样使用(推荐封装为一个 map,作为单个参数传递给
mapper):

<select id=”selectuser” resulttype=”user”>
	select id, name, account from user
	<where>
		<if test="name != null and name != '' ">and name = #{name}</if>
		<if test="account != null and account != '' ">and account = #{account}</if>
	</where>
</select>

三、多个参数封装成 list、array、map 或 其他对象

由于我们的参数超过了两个,而方法中只有一个 Object 参数收集,因此我们可以使用 Map 集合来装载我们的参数


Map < String, Object > map = new HashMap();
map.put("name", name);
map.put("account", account);

//mapper方法
List<user> getUserList(@Param("params")Map<String,Object> params);

对应xml

<select id=”getUserList” resulttype=”user”>
	select id, name, account from user
	<where>
		<if test="params.name != null and params.name != '' ">and name = #{params.name}</if>
		<if test="params.account != null and params.account != '' ">and account = #{params.account}</if>
	</where>
</select>

也可以 Map对象但不加@Param注释,则对应xml

<select id=”getUserList” resulttype=”user”>
	select id, name, account from user
	<where>
		<if test="name != null and name != '' ">and name = #{name}</if>
		<if test="account != null and account != '' ">and account = #{account}</if>
	</where>
</select>

list作为参数:

<!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
<select id="getList" resultType="user">
   select *
   from user u 
   where u.id in
   <foreach collection="list" item="userId" index="index" open="(" close=")" separator=",">
       #{userId}
   </foreach>
</select>
 类似资料: