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

    1. 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参
    2. 例子:方法:update(Integer id) sql映射文件取值#{a},这样也可以取到值
  2. 多个参数:mybatis会做特殊处理,即把多个参数封装成一个map ,key:param1....paramN,value:传入的参数值,#{}就是就是从map中获取指定的key的value,即#{param1},#{param2}等

  3. 多个参数处理:自定义封装参数的key

    1. 方法 get(@Param("id") Integer id,@Param("name") String name) key使用@Param注解指定的值
    2. 取值:#{id},#{name} #{自定的key}取出对应的值
  4. 如果多个参数正好是我们业务逻辑的数据模型(可以只是模型的部分数据)就可以直接传入pojo

    1. #{属性名}取出传入的pojo属性值
  5. 如果多个参数不是我们我们业务逻辑的模型,没有对应的pojo,不推荐为了方便,我们可以传入map

    1. #{key}取出map中对应的值
  6. 如果多个参数不是我们我们业务逻辑的模型,但是经常使用,推荐封装成一个vo(其实就是一个简单的javabean,把所有参数封装到一个java类中)

  7. 如果形参只有一个,但是形参的类型是集合(collection,list,set)或者数组,也会做特殊处理,把它们封装到map中

    1. 如果形参是collection,那么map的key是collection
    2. 如果是collection中的list,那么map的key是list,取值#{list[0]},表示取出list中第一个元素
    3. 如果是数组,那么map的key是array,取值#{array}
  8. #{}取值和${}取值的区别

    1. #{}是以预编译的形式,将参数设置到sql中 ,利用preparedStatement,防止sql注入
    2. ${},取出的值直接拼在sql中,有安全问题
    3. 原生jdbc不支持占位符的地方zhi能用${}取值,比如分表、排序等
  9. #{}更丰富的用法

    1. 规定参数的一下规则:javaType、 jdbcType、 mode(存储过程)、 numericScale、

      resultMap、 typeHandler、 jdbcTypeName、 expression(未来准备支持的功能)

    2. jdbcType:数据库类型:通常需要在某种特定的条件下被设置:

      1. 在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如Oracle(报错);

      2. JdbcType OTHER:无效的类型;因为mybatis对所有的null都映射的是原生Jdbc的OTHER类型,oracle不能正确处理;

      3. 由于全局配置中:jdbcTypeForNull=OTHER;oracle不支持;两种办法

        1. #{email,jdbcType=OTHER};

        2. jdbcTypeForNull=NULL

          <setting name="jdbcTypeForNull" value="NULL"/>

mybatis参数传参、取值处理等的更多相关文章

  1. Mybatis映射文件中#取值时指定参数相关规则

    Mybatis映射文件中#取值时指定参数相关规则 在#{}中,除了需要的数值外,还可以规定参数的一些其他规则. 例如:javaType,jdbcType,mode(存储过程),numericScale ...

  2. mybatis中两种取值方式?谈谈Spring框架理解?

    1.mybatis中两种取值方式? 回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ ...

  3. mybatis学习$与#号取值区别

    1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号,  2.#号写是可以防止sql注入,比较安全 select * from use ...

  4. python笔记之强制函数以关键字参数传参

    最近学习python,学到了函数传参,看到了以下这个特殊情况,特此来做个笔记 def add(*, x, y): print(x, y) 以上函数定义后,该怎么传参?前面的那个*号是做什么用的? 我们 ...

  5. Vue系列之 => 使用钩子函数的第二个参数传参

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 【原】使用Builder模式替代构造参数传参

    前言:关于传递参数,当参数过多的时候我们可以考虑使用建造者模式. #没用 Builder模式 之前是这样传参的: 如下所示,构造方法里面的参数一大堆,看起来就非常的混乱. 用了Builder模式之后是 ...

  7. Hibernate的HQL语句中定位参数和具名参数传参

    HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...

  8. Java SSM框架之MyBatis3(七)MyBatis之参数取值

    在mybatis中,参数取值方式有两种:#{ } 和 ${ } 一.#{ } select * from student where name=#{name} 编译后执行的sql语句: select ...

  9. 8、SpringBoot+Mybatis整合------参数取值方式

    前言: 我们知道,在mybatis中,参数取值方式有两种: #{ } 和 ${ } 下面,我们来探讨下#{ }与${ }不同. 一.#{ } 例: select * from student wher ...

随机推荐

  1. FMCJ450-基于ADRV9009的射频收发模块

    FMCJ450-基于ADRV9009的射频收发模块 一.板卡概述 接收路径包括两个具有动态范围的独立式宽带宽直接转换接收器.该器件还支持宽带宽分时观察路径接收器,供在 TDD 应用中使用.完整的接收子 ...

  2. C语言:标准IO_fopen( )、fclose() ①

    思前想后一个月,我终于敲下了我的第一篇开山之作. 博客千千万,我的博客首先记录的是学习时候的理解,用于给自己翻阅查找,现在主要研究的是C语言和STM32.如果能帮到你,那是最好的,假如我写的东西有错误 ...

  3. JVM内存溢出处理方法

    OOM(Out of Memory)异常常见有以下几个原因: 1)老年代内存不足:java.lang.OutOfMemoryError:Javaheapspace 2)永久代内存不足:java.lan ...

  4. 树上独立集数量 树型DP

    题目描述: 对于一棵树,独立集是指两两互不相邻的节点构成的集合.例如,图1有5个不同的独立集(1个双点集合.3个单点集合.1个空集),图2有14个不同的独立集,图3有5536个不同的独立集.  输入: ...

  5. ipv4固定ip地址

    1.vi /etc/sysconfig/network-scripts/ifcfg-enp7s0f0    ##在后面添加ip和域名解析IPADDR="192.168.130.34" ...

  6. linux基础命令--lsof

    lsof(list open files)作用: 是一个列出当前系统打开文件的工具. 注: 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root ...

  7. VueJS简明教程(一)之基本使用方法

    简介:这是一篇超级简单的入门文章 如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但无论是代码量还是流程规范性都是前者较优. Vue. ...

  8. 2019年7月25日 shell练习--PAT题目1006:换个格式输出整数(失败案例)

    让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<),换个格式来输出任一个不超过 3 位的正整数.例如 234 应该被输出为 BBSSS123 ...

  9. CF1263F

    题目描述 给出一个类似这样 的图,求删掉最多的黑边使得每个特殊点和至少一个节点1连通 保证上下两棵树都存在一种dfs序使得访问特殊点的顺序为1~n 题解 设f[i][j]表示上面的树最后一个特殊点为i ...

  10. C# WPF开机自启动和只允许一个程序运行

    本文出自:https://www.cnblogs.com/2186009311CFF/p/10024949.html 在App.xaml.cs填充一下内容,即可实现只允许一个运行,且不解锁屏幕的情况下 ...