MyBatis:参数传递实践巩固

本文总结了MyBatis的参数传递方式,包括单参数直接赋值、多参数的POJO封装、Map接口使用、@Param注解以及数组、集合类型的参数处理。详细介绍了在XML映射文件中如何通过#{属性名}、#{key}和foreach元素来获取和设置参数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis参数传递总结

一、MyBatis入参处理

  • 传递单个参数的形式,mybatis会自动进行参数的赋值
  • 传递多个参数的形式,myabtis会自动封装在Map集合中
  • Collection、List、Array作为参数,封装为Map,但是有一定的规则
1.1 单参数MyBatis会直接取出参数值给Mapper文件赋值,如:#{id}
1.1.1 PersonMapper接口
public void deletePerson(Integer id);
1.1.2 PersonMapper.xml
  <delete id="deletePerson" parameterType="int">
      delete from person where id=#{parameter1}
  </delete>

1.2 多参数MyBatis默认处理方式
1.2.1 PersonMapper接口
public Person getPersonByNameAndGender(String username,String gender);
1.2.2 PersonMapper.xml

提示信息为Avaliable parameters are arg1,arg0,param1,param2

<!--错误-->
  <select id="getPersonByNameAndGender" resultType="person">
    select * from person where username=#{username} and gender=#{gender}
  </select>
<!--根据提示信息修改,正确-->
  <select id="getPersonByNameAndGender" resultType="person">
    select * from person where username=#{param1} and gender=#{param2}
  </select>

1.3 多参数处理-封装POJO类
1.3.1 PersonMapper
public Person getPersonByNameAndGender(Person person);
1.3.2 PersonMapper.xml

XML文件中,#{属性名}取出传入的pojo的属性值

<!--框架书中有parameterType="xxx"-->
  <select id="getPersonByNameAndGender" resultType="person">
    select * from person where username=#{username} and gender=#{gender}
  </select>
1.3.3 Test
Person person = personMapper.getPersonByNameAndGender(new Person("Jessica","f"))

1.4 多参数处理-Map接口

传递给映射器的是一个map对象,使用它在SQL中设置对象的参数

1.4.1 PersonMapper
public Person getPersonByNameAndGender(Map<String,Object> param);
1.4.2 PersonMapper.xml

XML文件中,#{key}取出传入的key对应的value

  <select id="getPersonByNameAndGender" resultType="person">
    select * from person where username=#{name} and gender=#{gender}
  </select>
1.4.3 Test
Map<String,Object> parameterMap = HashMap<String,Object>();
parameterMap.put("name","Derrick");
parameterMap.put("gender","m");

1.5 多参数处理-@Param注解

如实训项目中所使用,代码的可读性大大提高

public Person getPersonByNameAndGender(@Param("username") String username,@Param("gender") String gender)

1.6 数组、集合类型参数,下标获取一个值
  • 当参数为Collection接口,转换为Map,Map的key为collection
  • 当参数为List接口,除了collection的值外,list作为key
  • 当参数为数组,转换为Map,Map的key为array
1.6.1 PersonMapper
public Person getPersonByCollection(Collection list);
1.6.2 PersonMapper.xml
  <select id="getPersonByCollection" resultType="person">
    select * from person where id=#{collection[0]}
  </select>
<!--如果是传list,还可以如下表示-->
  <select id="getPersonByCollection" resultType="person">
    select * from person where id=#{list[0]}
  </select>
1.6.3 Test
Person person = personMapper.getPersonByCollection(Array.asList(1,2));

1.6.4 PersonMapper,参数为数组
public Person getPersonByCollection(int[] ids);
1.6.5 PersonMapper.xml
  <select id="getPersonByCollection" resultType="person">
    select * from person where id=#{array[0]}
  </select>

1.6.6 PersonMapper,修改key值
public Person getPersonByCollection(@Param("test")int[] ids);
1.6.7 PersonMapper.xml
  <select id="getPersonByCollection" resultType="person">
    select * from person where id=#{test[0]}
  </select>

1.7数组、集合类型参数,获取多个值

foreach元素:循环遍历集合,支持数组和List、Set接口,对其提供遍历功能

  • collection:代表需要循环迭代的数组的名字
  • item:当前所遍历的对象名字
  • index:遍历的索引
  • open:遍历的内容与SQL语句拼接,开始的时候的字符
  • close:遍历的内容与SQL语句拼接,结果的时候的字符
  • separator:遍历的内容与SQL语句拼接,分割
1.7.1 PersonMapper
public List<Person> getPersonsByIds(int[] ids);
1.7.2 PersonMapper.xml
  <select id="getPersonsByIds" resultType="person">
    select * from person where id in
    <foreach collection="array" item="id" index="i" open="(" close=")" separator=",">
      #{id}
    </foreach>
  </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值