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参数传递及返回类型相关推荐

  1. Mybatis ResultType处理返回类型

    目录 1. 使用resultType返回List 2. 使用resultType返回单个对象 3. 使用resultType返回List,适用于多表查询返回结果集 4. 使用resultType返回M ...

  2. mybatis中resultMap返回类型

    前面写了一篇关于resultType的文章,有兴趣的可以看看 这次写一篇resultMap的.就像官网上面说的"结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复 ...

  3. c语言 函数的参数传递示例_C-用户定义的函数示例,没有参数,没有返回类型...

    c语言 函数的参数传递示例 Define a function with no argument and no return type in C language. 用C语言定义一个没有参数且没有返回 ...

  4. Mybatis返回类型和接收参数为Map类型

    事情的起因是这样的:今天在项目中查看mybatis框架的sql语句时候,看到接收参数和返回参数都是Map类型,这使得我突然眼前一亮,因为之前所接触过的传参和返回类型,除了java的常用数据类型之外,就 ...

  5. SSM之一点一滴:mybatis parameterType传入类型 resultType返回类型

    一.parameterType参数传入类型 概述: parameterType传入参数类型可以为int,String,Integer,Date,java实体类,map等,下面的用法中采用的是param ...

  6. mysql int和bigdecimal,mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象

    用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...

  7. mal是什么类型对应的java类型是什么,【Java】mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象...

    用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...

  8. php 对象方法作为参数,在C++中对象如何作为参数传递和返回?(代码示例)

    在C++中,我们可以将类的对象作为参数传递,还可以像传递和返回其他变量一样从函数中返回它们:且不需要特殊的关键字或头文件.下面本篇文章就来带大家了解一下,希望对大家有所帮助. 1.将对象作为参数传递 ...

  9. PHP版本区别5与7:性能 64位 运算符 输入类型 返回类型 匿名类;7改进1.变量存储空间2.数组结构3.函数调用机制

    1.性能提升:PHP7比PHP5.0性能提升了两倍. 2.全面一致的64位支持. 3.以前的许多致命错误,现在改成抛出异常. 4.PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(服务器端 ...

最新文章

  1. 愚蠢的CNN,换个马甲就认不出猫!但,这病能治 | ICLR Oral
  2. [美文欣赏]清华胡宇迪教授谈
  3. .Net Core中使用RabbitMQ
  4. CentOS查看CPU信息
  5. 经典数值优化算法--专题学习
  6. Android连接相机WiFi,安卓手机使用佳能相机机身wifi传输拍摄的操作
  7. 计算机应用技术工作项目是,论计算机应用技术在工程项目管理中的应用(原稿)...
  8. iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习
  9. Java虚拟机JVM的内存管理
  10. OpenCV4每日一练day7:视频加载、摄像头调用、视频文件保存
  11. ADSL宽带路由密码恢复经验详谈
  12. Java SPI机制简介
  13. MT【293】拐点处切线
  14. 时域和频域和频谱的关系
  15. oppo计算机找不到,oppo手机和电脑连接不上怎么办只显示充电(原来这个功能没有打开)...
  16. 新域名 @live.com 和 @windowslive.com 即将上线 (from cnbeta)
  17. QGis二次开发:预览几何图形,QgsRubberBand的应用
  18. Ubuntu鼠标移动中闪烁解决方法
  19. 令人迷惑的scp路径
  20. SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度

热门文章

  1. R语言对矩阵按某一列排序
  2. 基于S2SH的电子商务网站系统性能优化
  3. python语言程序设计计算机二级难不难_全国计算机二级的难度有多大?
  4. 5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?
  5. 光盘刻录只允许读取不能拷贝_原来 8 张图,就可以搞懂「零拷贝」了
  6. css 关闭按钮实现,CSS做的关闭按钮动效
  7. mongodb java id 查询数据_java 用 _id 查找 MongoDB 下的数据
  8. mysql按日、周、月、年分别统计数据
  9. 上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...
  10. docker部署nessus+awvs