mybatis 中接口参数与xml参数对应关系
mybatis 中接口参数与xml参数对应关系
摘要
在 MyBatis 中,接口方法的参数与 XML 映射文件中的参数之间存在多种对应关系
1. 单个参数
基本类型或简单对象作为参数:
- 如果接口方法只有一个参数,且该参数是基本类型(如
int、String等)或简单对象(如java.util.Date),在 XML 映射文件中可以直接使用#{}或${}占位符来引用该参数。
Java 接口:
1 2 3public interface UserMapper { User getUserById(int id); }XML 映射文件:
1 2 3<select id="getUserById" resultType="com.example.User"> SELECT * FROM users WHERE id = #{id} </select>- 这里的
#{id}会自动将接口方法中的id参数传递给 SQL 语句。
- 如果接口方法只有一个参数,且该参数是基本类型(如
2. 多个参数
使用
@Param注解:- 当接口方法有多个参数时,可以使用
@Param注解为参数指定名称,在 XML 中使用该名称来引用参数。
Java 接口:
1 2 3public interface UserMapper { User getUserByNameAndAge(@Param("name") String userName, @Param("age") int userAge); }XML 映射文件:
1 2 3<select id="getUserByNameAndAge" resultType="com.example.User"> SELECT * FROM users WHERE name = #{name} AND age = #{age} </select>@Param("name")为userName参数指定了在 XML 中使用的名称为name,@Param("age")为userAge参数指定了在 XML 中使用的名称为age。
- 当接口方法有多个参数时,可以使用
不使用
@Param注解:- 如果不使用
@Param注解,MyBatis 会根据参数的位置使用arg0、arg1等名称。
Java 接口:
1 2 3public interface UserMapper { User getUserByNameAndAge(String userName, int userAge); }XML 映射文件:
1 2 3<select id="getUserByNameAndAge" resultType="com.example.User"> SELECT * FROM users WHERE name = #{arg0} AND age = #{arg1} </select>- 如果不使用
3. Map 作为参数
使用
Map传递多个参数:- 可以将多个参数封装在
Map中传递给接口方法,在 XML 中使用map的键来引用参数。
Java 接口:
1 2 3public interface UserMapper { User getUserByMap(Map<String, Object> params); }XML 映射文件:
1 2 3<select id="getUserByMap" resultType="com.example.User"> SELECT * FROM users WHERE name = #{userName} AND age = #{userAge} </select>- 在调用接口方法时,将参数放入
Map中:
1 2 3 4Map<String, Object> params = new HashMap<>(); params.put("userName", "John"); params.put("userAge", 30); userMapper.getUserByMap(params);- 可以将多个参数封装在
4. POJO 作为参数
使用自定义对象作为参数:
- 可以使用自定义的 Java 对象(POJO)作为参数,MyBatis 会将对象的属性作为参数传递给 XML。
Java 接口:
1 2 3public interface UserMapper { User getUserByUser(User user); }XML 映射文件:
1 2 3<select id="getUserByUser" resultType="com.example.User"> SELECT * FROM users WHERE name = #{name} AND age = #{age} </select>- 这里假设
User对象有name和age属性,MyBatis 会自动将对象的属性传递给 XML。
5. 集合作为参数
使用
List或Set作为参数:- 可以将
List或Set作为参数传递给接口方法,在 XML 中使用collection属性来处理集合。
Java 接口:
1 2 3public interface UserMapper { List<User> getUsersByIds(List<Integer> ids); }XML 映射文件:
1 2 3 4 5 6<select id="getUsersByIds" resultType="com.example.User"> SELECT * FROM users WHERE id IN <foreach item="id" index="index" collection="list" open="(" separator="," close=")"> #{id} </foreach> </select>foreach元素用于遍历集合,collection="list"表示使用List作为参数,item="id"表示迭代元素,#{id}引用元素的值。
- 可以将
6. 数组作为参数
使用数组作为参数:
- 可以将数组作为参数传递给接口方法,在 XML 中使用
array属性来处理数组。
Java 接口:
1 2 3public interface UserMapper { List<User> getUsersByIds(int[] ids); }XML 映射文件:
1 2 3 4 5 6<select id="getUsersByIds" resultType="com.example.User"> SELECT * FROM users WHERE id IN <foreach item="id" index="index" collection="array" open="(" separator="," close=")"> #{id} </foreach> </select>- 可以将数组作为参数传递给接口方法,在 XML 中使用
总结:
- 对于单个参数,直接使用
#{}或${}占位符。 - 对于多个参数,可以使用
@Param注解或使用arg0、arg1等位置参数。 - 可以使用
Map、POJO、集合或数组作为参数,使用不同的方式在 XML 中引用参数。
通过上述方法,可以灵活处理 MyBatis 接口和 XML 映射文件中参数的对应关系,实现参数的传递和使用。
- 原文作者:Ethan
- 原文链接:https://zhangxingong.top/post/mybatis-params-maping/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。



