mybatis的mysql参数传递_Mybatis参数传递及返回类型

mybatis参数传递:

单个参数:不做特殊处理

#{参数名}:取出参数值

多个参数:做特殊处理

多个参数会被封装成一个map

key:param1   ...   paramN

value:传入的参数值

#{}就是从map中获取指定的key值

操作:

方法:public Employee getEmployeeByNmaeAndPass(String name,String pass);

取值:#{name},#{pass}

命名参数:明确指定封装参数时map的key:@Param("id")

多个参数会被封装成一个map

key:使用@Param注解指定的值

value:参数值

#{指定的key}取出对应的参数值

POJO:

如果多个参数是业务模型中的数据,可以直接使用POJO:

#{属性名}:取出传入的POJO 的属性值

Map:

如果多个参数不是业务模型中的数据,没有对应的POJO,为了方便,可以传入map

#{key}:取出map中对应的值

TO:

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

Page{

int index;

int size;

}

示例:

1、public Employee getEmployee(@Param("name")String name,String pass);

取值:name=====>#{name/param1}   pass=====>#{param2}

2、public Employee getEmployee(String name,@Param("emp")Employee employee);

取值:name====>#{param1}      pass=====>#{emp.pass/param2.pass}

3、如果是Collection(List   Set)类型或者是数组型,也会特殊处理,

也是把传入的list或者数组封装在map中

key:Collection(collection),如果是List还可以使用这个key(list)

数组(array)

public Employee getEmpById(List ids);

取值:取出第一个id的值:#{list[0]}

mybatis处理参数:

总结:参数多时会封装map,未了不混乱,可以使用@Param来指定封装时使用的key;

#{key}就可以取出map中的值

(@Param("id")Integer id,@Param("name")String name);

ParamNameResolver解析参数封装的map:

names:{0=id,1=name}

1、获取每个标了param注解的参数的@Param的值:id,name:赋值给name

2、每次解析一个参数给map中保存信息:(key:参数索引,value:name的值)

name的值:

标注了param注解:注解值

没有标注:

1、全局配置:userActualParam(jdk1.8):name=参数名

2、name=map.size();相当于当前元素索引

mybatis参数值的获取

#{}:可以获取map中的值或者pojo对象属性的值

${}: 可以获取map中的值或者pojo对象属性的值

区别:

#{}:是以预编译的形式,将参数设置到sql语句中:PreparedStatement;防止sql注入

${}:取出的值,直接拼接在sql语句中,会由安全问题;

大多情况下,都会使用#{}

当存在分表、排序:按照年份分表拆分

原生jdbc不支持占位符的地方就可以使用${}进行取值

select * from  ${year}_salary where xxxx;

select * from tb_student order by ${name}

#{}:

可以规定参数的一些规则:

JavaType、jdbcType、mode(存储过程)、numeriScale、resultMap、typeHandler、jdbcTypeName

jdbcType通常需要在某种特定的条件下呗被设置:

在数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。

比如:Oracle(报错)

insert into student(id,name,age) values(null,'test',null)

oracle不能识别对null的操作,报错。因为mybatis对所有的null都映射的是原生jdbc的other类型。

但是MySQL可以识别对null的操作,若想解决此问题,则使用以下添加语句;

1、insert into student(id,name,age) values(#{id},#{name},#{age,jdbcType=NULL})

2、由于全局配置中,jdbcTypeForNull=OTHER:oracle不支持

此配置对使用MySQL数据库时的影响。

返回参数类型:

List型:

resultType:返回的是一个集合,要写集合中元素的类型

Map型:

resultType=“map”:返回一条记录

key:就是列名    value:对应的值

mybatis对用到的部分类进行了封装,可直接使用封装类型。

返回多条记录封装一个map:

1、resultType:要写集合中元素的类型。

Map:

键是这条记录的主键,值是记录封装后的JavaBean

2、在对应的方法上添加@MapKey("id") 告诉mybatis封装这个map的时候使用哪个属性作为map的key

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值