MyBatis参数传递方式详解

MyBatis的参数传递方式非常灵活,可以根据具体情况灵活选择,提高开发效率。

单个参数

单个参数可以是基本类型、包装类型或JavaBean对象。如果是JavaBean对象,MyBatis会根据属性名来映射参数。

例如,假设有一个查询用户信息的方法,传入参数为用户id:

public User getUserById(int id);

在SQL语句中,可以使用#{id}来引用参数值:

<select id="getUserById" resultType="com.example.User">
select * from user where id = #{id}
</select>

多个参数

多个参数可以使用@Param注解或Map对象传递。

@Param注解

@Param("name")表示参数为name属性的值,@Param("age")表示参数为age属性的值。例如,假设有一个查询用户信息的方法,传入参数为用户名和年龄:

public List<User> getUsersByNameAndAge(@Param("name") String name, @Param("age") int age);

在SQL语句中,可以使用#{name}和#{age}来引用参数值,对应的XML配置文件如下:

<select id="getUsersByNameAndAge" resultType="com.example.User">
select * from user where name = #{name} and age = #{age}
</select>

Map对象

Map的key表示参数名,value表示参数值:

public List<User> getUsers(Map<String, Object> paramMap);

在SQL语句中,可以使用#{name}和#{age}来引用参数值:

<select id="getUsers" resultType="com.example.User">
select * from user where name = #{name} and age = #{age}
</select>

数组或集合类型

数组

使用数组或集合类型作为参数传递时,MyBatis会将数组或集合中的每个元素作为一个单独的参数进行处理。可以在SQL语句中使用#{0}、#{1}、#{2}等形式引用每个参数。

例如,假设有一个查询用户信息的方法,传入参数为用户id列表,可以使用以下代码实现:

public List<User> getUsersByIds(Integer[] ids);

在SQL语句中,使用foreach标签来遍历id数组:

<select id="getUsersByIds" resultType="com.example.User">
select * from user where id in
<foreach item="item" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>

调用时,可以使用数组传递参数:

Integer[] ids = {1, 2, 3};
List<User> users = userDao.getUsersByIds(ids);

集合

使用集合类型作为参数传递时,可以使用List或Set。例如,假设有一个查询用户信息的方法,传入参数为用户名列表,可以使用以下代码实现:

public List<User> getUsersByNames(List<String> names);

在SQL语句中,使用foreach标签遍历name列表:

<select id="getUsersByNames" resultType="com.example.User">
select * from user where name in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>

调用时,可以使用List传递参数:

List<String> names = new ArrayList<>();
names.add("Tom");
names.add("Jerry");
names.add("Kate");
List<User> users = userDao.getUsersByNames(names);

最后

MyBatis作为一个轻量级的ORM框架,提供了多种灵活的参数传递方式,包括单个参数、多个参数、Map对象、JavaBean对象、数组或集合类型等。使用不同的参数传递方式,可以根据具体情况灵活选择,提高开发效率。

THE END