参数处理

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

    • #{参数名}:取出参数值
  • 多个参数:mybatis会做特殊处理

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

      • key:param1…paramN,或者参数的索引
      • value:传入的参数值
    • #{}就是从map中获取指定的key的值;
  • 命名参数:明确指定封装参数时map的key:@Param(“id”)

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

      • key:使用@Param注解指定值
      • value:参数值
    • #{指定的key}取出对应的参数值
  • 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]映射文件_参数处理相关推荐

  1. [mybatis]映射文件_参数处理_#取值时指定参数相关规则

    jdbcType通常需要在某种特定的条件下被设置: 在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理.比如Oracle(报错): jdbcType OTHER:无效 ...

  2. [mybatis]映射文件_参数处理_#和$取值区别

    #{}:可以获取map中的值或者pojo对象属性的值 ${}:可以获取map中的值或者pojo对象属性的值 区别: #{}:是以预编译的形式,将参数设置到sql语句中,相当于原生jdbc的Prepar ...

  3. MyBatis映射文件3(参数处理Map)

    参数命名 POJO 如果多个参数,正好是业务逻辑的数据模型,那么我们就可以直接传入POJO,这样#{}中就可以直接使用属性名 Map 如果多个参数不是业务逻辑的数据模型,没有对应的POJO,为了方便, ...

  4. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  5. MyBatis映射文件(一)

    目录 一.MyBatis映射文件 1.insert.update.delete元素 2.主键生成方式 3.参数(Parameters)传递 (1)单个参数 (2)多个参数 (3)命名参数 (4)POJ ...

  6. Mybatis映射文件!CDATA[[]] 转义问题

    有没有觉得在mybatis映射文件写>(大于),<(小于)的时候贼麻烦,还得把"<",">"换位为"<", & ...

  7. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录

    MyBatis映射文件如何给数据库的int类型字段"插入"string类型记录. 数据库中对应字段名称和类型如下: 给数据库的int类型字段"插入"string ...

  8. 3 了解MyBatis映射文件

    3.1 认识映射文件: 介绍:     MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC ...

  9. mybatis 取查询值_Mybatis --- 映射文件、参数处理、参数值的获取、select元素

    这样就可以在insert函数中获取新添加的用户的 id主键,否则获取不到 select * from student where id = #{id} insert into student(name ...

最新文章

  1. Tesseract 3.02 OCR文字识别调查记录
  2. 《STL源码剖析》学习--6章--_rotate算法分析
  3. sphinx搜索结果按权重排序php,Sphinx Ranking Mode(排序模式) (翻译)
  4. 尚硅谷SpringCloud(H版alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。
  5. csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)
  6. php 图片服务器搭建,php图像裁剪服务器搭建
  7. hadoop基础----hadoop理论----Hadoop简介
  8. 汇编取值运算符OFFSET,SEG,LEA和属性运算符PTR
  9. EPM240T100的Pin
  10. 恢复计算机个性化设置方法,Win7主题默认还原电脑用了主题软件没办法恢复完美解决系统主-win7主题...
  11. MATLAB 提取fig文件中数据的通用方法
  12. 洛谷 P4578 [FJOI2018] Upc6605 福建OI2018 所罗门王的宝藏
  13. android 屏幕密度范围,Android屏幕密度
  14. html dashed 属性,css虚线样式dotted和dashed
  15. Foo,getName题解分析
  16. 篆刻小站之设计与开发
  17. DDos攻击解析(附现状和案例)
  18. excel表格横向纵向变换_从Python到Excel
  19. 什么是哈希洪水攻击(Hash-Flooding Attack)?
  20. 区块链技术的应用领域

热门文章

  1. 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三
  2. IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
  3. Android之获取指定目录下的所有特殊文件名字
  4. Android之ActivityManager与Proxy模式的运用
  5. bat从数组中找出相同数字并删除_找到所有数组中消失的数字
  6. 数学思维比数学运算更重要
  7. 数据可视化,带给你的惊艳并不止这一点!
  8. Python为什么是编程语言中最skr的?
  9. nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
  10. 微型计算机原理中LEA,微型计算机系统原理及应用(第2版)第2章