我们在使用mybatis过程中,一般是一个mapper.java对应一个mapper.xml,在java文件写入方法名和xml文件的id进行对应,在这里我们经常会用到参数传入到xml中的问题
下面来聊一下mybatis传参问题
1.单个参数传递,不使用封装
java代码:
User findUserbyUsername(String username);
xml代码:
<select id="findUserbyUsername" parameterType="java.lang.String"
resultMap="UserMap">
select * from userinformation where username = #{username}
</select>
2.多个参数传递,不使用封装
java代码:
User findUserbyUsername(String username, String password);
xml代码:
多个参数传递,不需要使用parameterType,且将参数名改成索引,#{index},索引从0开始。
<select id="findUserbyUsername" resultMap="UserMap">
select * from userinformation where username = #{0}
and password=#{1}
</select>
3.使用封装DTO
java代码:
User findUserbyUsername(UserDto dto);
xml代码:
<select id="findUserbyUsername" parameterType="com.test.domain.UserDto"
resultMap="UserMap">
select * from userinformation where username = #{username}
and password=#{password}
</select>
4.使用map封装
java代码:
User findUserbyUsername(Map map);
xml:#{}里面的值为map的key
<select id="findUserbyUsername" parameterType="java.util.HashMap"
resultMap="UserMap">
select * from userinformation where username = #{username}
and password=#{password}
</select>
5.list封装
java代码:
List<User> getUserListById(List list);
xml代码:
<select id="getUserListById" resultMap="UserMap">
select * from userinformation where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
效果为:
select * from XXX where id in ('1','2','3')
6.使用注解
java代码:
User findUserbyUsername(@Param("username")String username,@Param("password")String password);
xml代码:
<select id="findUserbyUsername" resultMap="UserMap">
select * from userinformation where username = #{username}
and password=#{password}
</select>