[mybatis]映射文件_参数处理
参数处理
单个参数:mybatis不会做特殊处理
- #{参数名}:取出参数值
多个参数:mybatis会做特殊处理
- 多个参数会被封装成一个map
- key:param1…paramN,或者参数的索引
- value:传入的参数值
- #{}就是从map中获取指定的key的值;
- 多个参数会被封装成一个map
命名参数:明确指定封装参数时map的key:@Param(“id”)
- 多个参数会被封装成一个map
- key:使用@Param注解指定值
- value:参数值
- #{指定的key}取出对应的参数值
- 多个参数会被封装成一个map
pojo
- 如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo;
- #{属性名}:取出传入的pojo的属性值
如果多个参数不是业务模型中的数据,没有对应的pojo,为了方便,我们也可以传入map
- #{key}:取出map中对应的值
TO
- 如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个TO(Transfer Object)数据传输对象
//TO
Page
{int index;int size;
}
public Employee getEmpByIdAndLastName(Integer id,String lastName);
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">select * from tb1_employee where id = #{id} and last_name = #{lastName}</select>
Employee employee = mapper.getEmpByIdAndLastName(1, "Admin");
报错:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
正确写法:
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">select * from tb1_employee where id = #{param1} and last_name = #{param2}</select>
命名参数法:
public Employee getEmpByIdAndLastName(@Param("id") Integer id,@Param("lastName") String lastName);
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">select * from tb1_employee where id = #{id} and last_name = #{lastName}</select>
map法:
public Employee getEmpByMap(Map<String ,Object> map);
<!--public Employee getEmpByMap(Map<String,Object> map);--><select id="getEmpByMap" resultType="com.atguigu.mybatis.bean.Employee">select * from tb1_employee where id = #{id} and last_name = #{lastName}</select>
Map<String,Object> map = new HashMap<>();map.put("id",1);map.put("lastName","Tom");Employee employee = mapper.getEmpByMap(map);
扩展思考:
public Employee getEmp(@Param("id") Integer id,String lastName);
取值:
id -> #{id/param1}
lastName -> #{param2}
public Employee getEmp( Integer id,@Param("e") Employee emp);
取值:
id -> #{param1}
lastName -> #{param2.lastName/e.lastName}
- 特别注意:如果是Collection(List,Set)类型或者数组,也会特殊处理。也是把传入的list或者数组封装在map中
- key:Collection(collection),如果是List还可以使用这个key(list),数组(array)
public Employee getEmp(List<Integer> ids);
取值:
取出第一个id的值:
#{list[0]}
[mybatis]映射文件_参数处理相关推荐
- [mybatis]映射文件_参数处理_#取值时指定参数相关规则
jdbcType通常需要在某种特定的条件下被设置: 在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理.比如Oracle(报错): jdbcType OTHER:无效 ...
- [mybatis]映射文件_参数处理_#和$取值区别
#{}:可以获取map中的值或者pojo对象属性的值 ${}:可以获取map中的值或者pojo对象属性的值 区别: #{}:是以预编译的形式,将参数设置到sql语句中,相当于原生jdbc的Prepar ...
- MyBatis映射文件3(参数处理Map)
参数命名 POJO 如果多个参数,正好是业务逻辑的数据模型,那么我们就可以直接传入POJO,这样#{}中就可以直接使用属性名 Map 如果多个参数不是业务逻辑的数据模型,没有对应的POJO,为了方便, ...
- Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项
Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...
- MyBatis映射文件(一)
目录 一.MyBatis映射文件 1.insert.update.delete元素 2.主键生成方式 3.参数(Parameters)传递 (1)单个参数 (2)多个参数 (3)命名参数 (4)POJ ...
- Mybatis映射文件!CDATA[[]] 转义问题
有没有觉得在mybatis映射文件写>(大于),<(小于)的时候贼麻烦,还得把"<",">"换位为"<", & ...
- MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
MyBatis映射文件如何给数据库的int类型字段"插入"string类型记录. 数据库中对应字段名称和类型如下: 给数据库的int类型字段"插入"string ...
- 3 了解MyBatis映射文件
3.1 认识映射文件: 介绍: MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC ...
- mybatis 取查询值_Mybatis --- 映射文件、参数处理、参数值的获取、select元素
这样就可以在insert函数中获取新添加的用户的 id主键,否则获取不到 select * from student where id = #{id} insert into student(name ...
最新文章
- Tesseract 3.02 OCR文字识别调查记录
- 《STL源码剖析》学习--6章--_rotate算法分析
- sphinx搜索结果按权重排序php,Sphinx Ranking Mode(排序模式) (翻译)
- 尚硅谷SpringCloud(H版alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。
- csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)
- php 图片服务器搭建,php图像裁剪服务器搭建
- hadoop基础----hadoop理论----Hadoop简介
- 汇编取值运算符OFFSET,SEG,LEA和属性运算符PTR
- EPM240T100的Pin
- 恢复计算机个性化设置方法,Win7主题默认还原电脑用了主题软件没办法恢复完美解决系统主-win7主题...
- MATLAB 提取fig文件中数据的通用方法
- 洛谷 P4578 [FJOI2018] Upc6605 福建OI2018 所罗门王的宝藏
- android 屏幕密度范围,Android屏幕密度
- html dashed 属性,css虚线样式dotted和dashed
- Foo,getName题解分析
- 篆刻小站之设计与开发
- DDos攻击解析(附现状和案例)
- excel表格横向纵向变换_从Python到Excel
- 什么是哈希洪水攻击(Hash-Flooding Attack)?
- 区块链技术的应用领域
热门文章
- 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三
- IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
- Android之获取指定目录下的所有特殊文件名字
- Android之ActivityManager与Proxy模式的运用
- bat从数组中找出相同数字并删除_找到所有数组中消失的数字
- 数学思维比数学运算更重要
- 数据可视化,带给你的惊艳并不止这一点!
- Python为什么是编程语言中最skr的?
- nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
- 微型计算机原理中LEA,微型计算机系统原理及应用(第2版)第2章