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<Integer> 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不支持
<setting name="jdbcTypeForNull" value="NULL">
此配置对使用MySQL数据库时的影响。
返回参数类型:
List型:
resultType:返回的是一个集合,要写集合中元素的类型
Map型:
resultType=“map”:返回一条记录
key:就是列名 value:对应的值
mybatis对用到的部分类进行了封装,可直接使用封装类型。
返回多条记录封装一个map:
1、resultType:要写集合中元素的类型。
Map<Integer,Employee>:
键是这条记录的主键,值是记录封装后的JavaBean
2、在对应的方法上添加@MapKey("id") 告诉mybatis封装这个map的时候使用哪个属性作为map的key
转载于:https://www.cnblogs.com/staticking/p/7001091.html
Mybatis参数传递及返回类型相关推荐
- Mybatis ResultType处理返回类型
目录 1. 使用resultType返回List 2. 使用resultType返回单个对象 3. 使用resultType返回List,适用于多表查询返回结果集 4. 使用resultType返回M ...
- mybatis中resultMap返回类型
前面写了一篇关于resultType的文章,有兴趣的可以看看 这次写一篇resultMap的.就像官网上面说的"结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复 ...
- c语言 函数的参数传递示例_C-用户定义的函数示例,没有参数,没有返回类型...
c语言 函数的参数传递示例 Define a function with no argument and no return type in C language. 用C语言定义一个没有参数且没有返回 ...
- Mybatis返回类型和接收参数为Map类型
事情的起因是这样的:今天在项目中查看mybatis框架的sql语句时候,看到接收参数和返回参数都是Map类型,这使得我突然眼前一亮,因为之前所接触过的传参和返回类型,除了java的常用数据类型之外,就 ...
- SSM之一点一滴:mybatis parameterType传入类型 resultType返回类型
一.parameterType参数传入类型 概述: parameterType传入参数类型可以为int,String,Integer,Date,java实体类,map等,下面的用法中采用的是param ...
- mysql int和bigdecimal,mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象
用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...
- mal是什么类型对应的java类型是什么,【Java】mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象...
用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...
- php 对象方法作为参数,在C++中对象如何作为参数传递和返回?(代码示例)
在C++中,我们可以将类的对象作为参数传递,还可以像传递和返回其他变量一样从函数中返回它们:且不需要特殊的关键字或头文件.下面本篇文章就来带大家了解一下,希望对大家有所帮助. 1.将对象作为参数传递 ...
- PHP版本区别5与7:性能 64位 运算符 输入类型 返回类型 匿名类;7改进1.变量存储空间2.数组结构3.函数调用机制
1.性能提升:PHP7比PHP5.0性能提升了两倍. 2.全面一致的64位支持. 3.以前的许多致命错误,现在改成抛出异常. 4.PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(服务器端 ...
最新文章
- 愚蠢的CNN,换个马甲就认不出猫!但,这病能治 | ICLR Oral
- [美文欣赏]清华胡宇迪教授谈
- .Net Core中使用RabbitMQ
- CentOS查看CPU信息
- 经典数值优化算法--专题学习
- Android连接相机WiFi,安卓手机使用佳能相机机身wifi传输拍摄的操作
- 计算机应用技术工作项目是,论计算机应用技术在工程项目管理中的应用(原稿)...
- iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习
- Java虚拟机JVM的内存管理
- OpenCV4每日一练day7:视频加载、摄像头调用、视频文件保存
- ADSL宽带路由密码恢复经验详谈
- Java SPI机制简介
- MT【293】拐点处切线
- 时域和频域和频谱的关系
- oppo计算机找不到,oppo手机和电脑连接不上怎么办只显示充电(原来这个功能没有打开)...
- 新域名 @live.com 和 @windowslive.com 即将上线 (from cnbeta)
- QGis二次开发:预览几何图形,QgsRubberBand的应用
- Ubuntu鼠标移动中闪烁解决方法
- 令人迷惑的scp路径
- SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度
热门文章
- R语言对矩阵按某一列排序
- 基于S2SH的电子商务网站系统性能优化
- python语言程序设计计算机二级难不难_全国计算机二级的难度有多大?
- 5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?
- 光盘刻录只允许读取不能拷贝_原来 8 张图,就可以搞懂「零拷贝」了
- css 关闭按钮实现,CSS做的关闭按钮动效
- mongodb java id 查询数据_java 用 _id 查找 MongoDB 下的数据
- mysql按日、周、月、年分别统计数据
- 上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...
- docker部署nessus+awvs