MyBatis--参数处理

1.MyBatis对参数的处理

 1.1 单个参数:mybatis不会做特殊处理

#{参数名/任意名}:取出参数值。

 1.2 多个参数:mybatis会做特殊处理

封装成 一个map,
	key:param1...paramN,或者参数的索引也可以
	value:传入的参数值	
#{}就是从map中获取指定的key的值;

 1.3 参数类型:Collection(List、Set)类型或者是数组

封装在map中。
	key:Collection(collection)| List(list)| 数组(array)
	value:传入的参数值
public Employee getEmpById(List<Integer> ids);
取值:取出第一个id的值:   #{list[0]}

2.命名参数:指定封装参数时map的key @Param(“id”)

多个参数会被封装成 一个map,
	key:使用@Param注解指定的值
	value:参数值
#{指定的key}取出对应的参数值
public Employee getEmployeeID2(@Param("id") Integer id,@Param("name") String name);

3.传入参数类型的选择

 3.1 POJO(简单的JAVA类,一般为bean包下的对象)

如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
	#{属性名}:取出传入的pojo的属性值

   接口方法(后面部分省略)

public boolean insertEmployee(Employee employee);

 3.2 Map

如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
	#{key}:取出map中对应的值

   接口方法

public Employee getEmployeeID3(Map<String,Object> map);

   Mapper.xml的select

<select id="getEmployeeID3" resultType="bean.Employee" databaseId="mysql">
	select * from employee where id = #{id} AND name=#{name}
</select>

   test中的使用

Map<String,Object> map = new HashMap<>();
map.put("id",1);
map.put("name","litao");
Employee employee = employeeMapper.getEmployeeID3(map);
System.out.println(employee);

 3.3 TO

   如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO(Transfer Object)数据传输对象

4.参数值的获取

 4.1 #{}与${}区别

select * from employee where id=${id} and name=#{name}

Preparing: select * from employee where id=1 and name=?
	#{}:(大多数使用)是以预编译的形式,将参数设置到sql语句中;同PreparedStatement可以防止sql注入
	${}:(特别需求时使用)取出的值直接拼装在sql语句中;会有安全问题;

 4.2 使用${}

	原生jdbc不支持占位符的地方我们就可以使用${}进行取值
	比如分表、排序。。。;按照年份分表拆分 select * from ${year}_salary where xxx;

 4.3 #{}其他的用法

	jdbcType通常需要在某种特定的条件下被设置:
	在我们数据为null的时候,Oracle数据库不能识别mybatis对null的默认处理。
	由于mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理;

	两种解决办法:
	1、(#{}中)#{email,jdbcType=NULL}
	2、(全局配置中)<setting name="jdbcTypeForNull" value="NULL"/>

5.内置参数

 5.1 _parameter:代表整个参数

 		单个参数:_parameter就是这个参数
 		多个参数:参数会被封装为一个map,_parameter就是代表这个map

 5.2 _databaseId:如果配置了databaseIdProvider标签,

 			_databaseId就是代表当前数据库的别名oracle
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值