1、单个参数:
非自定义对象
传参:getStuById(Integer id);
取值:#{id}
单个基本类型参数,随便取值都行;#{ok}
对象:
传参:saveStudent(Student student)
取值:#{属性名}

2、多个参数:
传参:getStudentByLastNameAndAge(String lastName,Integer age)
取值:#{参数名}不好使;报错提示可用的参数是[0,1,param1,param2]
可用的取值方式:
1)#{参数索引} #{0} #{1}
2)#{param参数第几个} #{param1} #{param2}
原因:一但方法传入了多个参数以后,mybatis会进行一个处理;把这些参数全部放在一个map中;
map中的key就是参数的索引,或者是param1...N

3、命名参数:我们可以使用@Param注解来指定mybatis在给多个参数封装map的时候,这个参数使用的key;默认参数索引或者paramx
传参:public Student getStudentByLastNameAndAge(@Param("lastName")String lastName,@Param("age")Integer age);
取值:#{命名的参数名}或者#{paramx}

什么时候用基本类型传参:不将参数封装成pojo直接传给mybatis;很少用到;
有些方法的参数是业务无关的;

4、POJO:我们这么建议;如果我们传递的参数正好是业务逻辑定义的pojo,就用pojo;
传参:saveStudent(Student student);
取值:#{属性名}

5、Map(集合);
传参:public Student getStuByLastNameAndAge(Map<String, Object> map);
取值:#{key}

不管传什么?如果单个参数,mybatis直接就拿来用,如果多个参数,mybatis会将多个参数封装进一个map中,
封装参数用的key默认是0,1,paramx。。。,我们可以使用@Param("key")为这个参数指定一个新的key

传参: getStudent(@Param("stu")Student stu,@Param("map")Map<String,Object> hahamap,@Param("lastName")String lastName);
取值:
取值student对象中的age值:#{param1.age}===#{stu.age}
取值hahamap中的email:#{param2.email}===#{map.email}
取值lastName:#{param3}===#{lastName}

POJO,Map怎么选择?
业务逻辑中定义的POJO我们就使用它,有比较多临时的参数,并不是某个javaBean的,可以为了方便将其封装一个map传递。

TO:(Transfer Object)(专门用它来传递数据的)
POJO:(普通的java类)
DO:(Domain Object)对象模型
DTO:Data Transfer Object:数据传输对象
DAO:Data Access Object:数据访问对象
VO:Value Object:值对象;

传参在mybatis的sql映射文件中正确获取的更多相关文章

  1. 关于Mybatis的SQL映射文件中in关键字的用法

    有一个需求是可以选择多个设备进行删除,于是想到将多个设备id拼成字符串作为参数,以逗号隔开,如:"123,234,456". SQL如下: <delete id=" ...

  2. Mybatis(二) SQL映射文件

    SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMappe ...

  3. 初始MyBatis、SQL映射文件

    MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...

  4. mybatis的sql映射文件—增删改查

    前提:需要的包log4j.jar,mybatis-3.4.1.jar,mysql-connector-java-5.1.37-bin.jar 1.基本类 员工类 package com.hand.my ...

  5. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?

    不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复:如果没有配 置 namespace,那么 id 不能重复: 原因就是 namespace+id 是作为 Map<S ...

  6. mybatis的sql映射文件不能打包进目录解决办法

    方法二: <build> <finalName>qwe</finalName> <plugins> <plugin> <groupId ...

  7. mybatis 传参为 Integer 时 ,Mapper 文件 中判断 条件 问题。

    <if test="valiStatus==null || valiStatus=='' || valiStatus==4 "> b.work_permit_card_ ...

  8. MyBatis 的基本要素—SQL 映射文件

    MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单.对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且 ...

  9. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

随机推荐

  1. 难点--均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)

    MSE: Mean Squared Error 均方误差是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度. MSE=1 ...

  2. cocos2d-x 3.0 安装及创建项目

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/LanerGaming/article/details/24146921 好久没实用过cocos2d- ...

  3. UVA806-Spatial Structures(四分树)

    Problem UVA806-Spatial Structures Accept:329  Submit:2778 Time Limit: 3000 mSec Problem Description ...

  4. 【洛谷】【搜索(dfs)】P3956 棋盘

    题目传送门:戳 题目描述: 有一个 \(m * m\) 的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色 ...

  5. centos增加环境变量

    在Linux CentOS系统上安装软件后,如果需要运行软件,一般是需要进入到软件的bin目录下进行才可以运行相应命令,否则会提示未找到命令.为了使用方便,我们一般把相应的bin目录增加到环境变量中( ...

  6. 转载 【.NET基础】--委托、事件、线程(3)

      之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A ...

  7. WebService之nginx+(php-fpm)结构模型剖析及优化

    随着php脚本语言使用的普及,目前webserice服务大部分都在用nginx+(php-fpm)的结构,了解了其工作过程后才可以在各个方面想办法做调整优化和故障排查,从以下几点总结一下这种模型. 一 ...

  8. vue自定义指令(Directive中的clickoutside.js)的理解

    阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DOM 操 ...

  9. STM32固件库详解

    STM32固件库详解   emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板 ...

  10. Android 百度sdk5.0定位

    在开发中可能 会用到诸如“定位出当前所在城市,所在位置的经纬度”等功能.一次性的定位肯能定位不成功,可能经纬度未读出来,也可能是地址信息或者城市信息未读出来.此时就需对定位后拿到的信息做判断,加入没有 ...