MyBatis 参数处理

1. 单个参数

 <select id="getStudent" resultType="com.mybatis.student.Student">
        select * from student where stu_id = #{id}
</select>
  • mybatis不会做特殊处理
  • 单个参数只要不为空都行

2. 多个参数

Java 代码

Map<String,Object> getStuByIdAndName( Integer id, String name);

映射配置

<select id="getStuByIdAndName" resultType="map">
        SELECT * FROM student s WHERE s.stu_id = #{id} and s.stu_name = #{name}
</select>
  • 多个参数时 mybatis 会将多个参数封装成一个map, 其中 key: param1…paramN 或索引, value: 传入的参数值.
  • 如果是 Collection 类型或者是数组, mybatis 也会将其封装在 Map 中. 其中 Collection类型的的 key 是: collection(List也可以使用list); 数组类型的 key 为: array
  • 直接使用参数名接收参数会出现异常:
    org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]

解决方式:

1.注解方式

使用 @Param("id") 注解标记方法的参数

Map<String,Object> getStuByIdAndName(@Param("id") Integer id,@Param("name") String name);
<select id="getStuByIdAndName" resultType="map">
        SELECT * FROM student s WHERE s.stu_id = #{id} and s.stu_name = #{name}
</select>

使用 @Param("id")标记后就可以使用指定的参数名来接收参数

2.POJO 方式

传入一个 POJO 用其属性取值

例如:

Java代码

 int count(Student student);

映射配置

<select id="count" resultType="int">
      SELECT COUNT(*) FROM student s WHERE s.stu_id = #{stu_id}
</select>
  • 在映射文件直接用 POJO 的属性值即可

3.Map 键值对

将要传入的参数封装成一个 Map 类型的传入

 Map<String,Object> getStuByIdAndName(Map<String,Object> map);
  • 取值时使用 #{key} 其中的 keyMap 中对应的 key


示例:

Student getStudent(@Param("id") Integer id,String name)
取值: id —> #{id}/#{param1} name —> #{param2}


Student getStudent(Integer id,@Param("stu") Student stu)
取值: id —> #{param1} name —> #{stu.name}/#{param2.name}


Student getStudent(List<Integer> ids)
取值: 若取第一个值 : #{list[0]}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值