单个参数
单个参数可以是基本类型、包装类型或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对象、数组或集合类型等。使用不同的参数传递方式,可以根据具体情况灵活选择,提高开发效率。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341