Mybatis参数传递

Mybatis参数获取与传递

一般建议使用#{},而在特定情况下才使用${},比如:模糊查询like以及批量删除的时候

Mybatis的参数传递主要有6种方式:

  • 单个参数
  • 多个参数
  • 命名参数@Param
  • Pojo
  • Map
  • Collection、Array【一般用于动态SQL】

1、${}

//在该方式中,mybatis调用的是Statement对象、调用的executeUpdate("SQL")的方法

<insert> 
insert into user values (null ,${name},${age},${sex})  
<insert/> 
  //实际上底层形成的SQL是 insert into user values (null,zhangsan,23,男)
  /**
	但是我们需要的是 
	insert into user values (null,'zhangsan',23,'男')
	所有我们需要将 ${} 改成 '${}',''需要我们手动拼接上
 */

2、#{}

//在该方式中,mybatis调用的是PreparedStatement对象、调用的executeUpdate()的方法
<insert> 
insert into user values (null ,#{name},#{age},#{sex})  
<insert/> 
  //实际上底层形成的SQL是 insert into user values (null,?,?,?)
  //mybatis底层默认会自动加上''

3、总结

一)当传输参数为单个String类型或基本数据类型及其包装类时

#{}:可以使用任意名字获取参数值,因为预编译的参数接收只与参数位置1、2、3有关

: 只 能 用 {}:只能用 {value}、${_parameter}来获取参数值

二) 当传输参数为一个Java Bean

#{}和${}都可以通过属性名直接获取属性的参数值

三)当传输的参数为2个及以上时

mybatis会默认将参数放在map集合中:

1.键为arg0 \arg1 \arg2…

2.键为param1 \ param2…

3.以参数为value


#{}:可以使用 #{arg0} #{arg1} | #{param1} #{param2}

: 可 以 用 {}: 可以用 :{atg0} ${arg1} | ${param1} ${param2},同时应注意’'的问题

四)当传输参数为Map类型时

Map<String ,Object> map = new HashMap<String ,Object>();

map.put("id",1001);
map.put("name","shufang");
Employee employee = mapper.getEmpByMap(map);

#{}${}都可以使用指定的key进行参数的指定 ~,但是需要注意**$$$$$的 ‘’ 问题**

五)通过@Param注解指定参数的key

//通过@Param注解来指定参数放进map的key
Employee getEmpByIdAndNameParam(@Param("id")String id, @Param("name") String name);

六)当传递的参数为List或者Array,mybatis会将List与Array参数放进Map中

List以list为key

Array以array为key

4、BindingException

Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found

这种异常就是#{}或者${}获取参数值有问题产生的异常

5、通过@Param指定K

通过@Param指定参数存在map中的key

//通过@Param注解来指定参数放进map的key
Employee getEmpByIdAndNameParam(@Param("id")String id, @Param("name") String name);
<!--Employee getEmpByIdAndNameParam(@Param("id")String id, @Param("name") String name);-->
<select id="getEmpByIdAndNameParam" resultType="Employee">
  select * from hr_emp where empid = #{id} and  name = #{name}
</select>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值