在本系列文章的《MyBatis多参数传递之Map方式示例》一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map conditions, int page, int pageSize)。这是一种混合形式,亦即既有Map类型的参数,也有类似int这种普通类型的参数。经过一番摸索,笔者还比较顺利地找到了这种情况的处理方法。

其实也很简单。在默认命名方式(MyBatis多参数传递之默认命名方式示例)一文中,介绍了MyBatis对参数的默认命名,这种命名在这种情况下依然有效。我们需要做的,就是如何根据这个命名读出Map中的参数值。这里就采用这种方式来实现教师分页查询。先修改映射器接口(TeacherMapper.java)中的教师分页查询方法的声明如下(完整×××:http://down.51cto.com/data/742758):

//分页查询教师信息
public List<Teacher> findTeacherByPage(
Map params, //查询条件
int start, //起始记录
int limit  //记录条数
);

(代码1)

那么MyBatis将会对此方法的三个参数依次命名为param1、param2和param3,其中第一个参数为Map类型,后两个参数为int类型。

执行类(CollectionDemo.java)中的查询代码片段如下:

Map<String, Object> params =
new HashMap<String, Object>();
//以name字段升序排序,
params.put("sort", "name");
params.put("dir", "asc");
//查询职称为教授或副教授的教师
params.put("title", "%教授");
//查询教师分页信息
List<Teacher> teachers =
//以name字段升序排序,从第0条记录开始查询。
//查询2条记录
mapper.findTeacherByPage(params,0, 2);

(代码2)

相应的映射配置(TeacherMapper.xml)文件片段如下:

<selectid="findTeacherByPage"resultMap="supervisorResultMap">
select * from teacher where teacher.title like
#{param1.title} order by ${param1.sort} ${param1.dir} limit #{param2},#{param3}
</select>

(代码3)

在以上的映射文件中,使用#{param1.title}的形式就能访问Map中title属性的值。当然,在order by子句中应使用${param1.sort}的形式(可参见本系列博文中的“MyBatis多参数传递之注解方式示例”一文,第二部分“可能会遇到的错误”第一个就是关于order by的。不过经笔者验证,在本例中使用“#”也是可以的)。由此我们可以总结出,我们使用#{参数默认命名.属性名}的形式,就可以在映射文件访问Map参数的属性值。

运行结果如下:

显然,如果使用注解的方式,给参数指定名称(关于注解方式传递多个参数,请参考本系列的博文:MyBatis多参数传递之注解方式示例),亦可使用上述形式来访问Map中的属性值,在此不再赘述(采用注解时,访问Map中的属性的源码,请到此处下载:http://down.51cto.com/data/742780)。

总结:在《关于该不该上JAVA培训班的一点看法》一文中,笔者提出的学习方法之一是“善于猜想”。而本次问题的解决,笔者并没有找到相关的参考资料,只是凭借着自己的猜想和编程验证。这说明,猜想是管用的。

猛戳这里全面系统地学习MyBatis 3

MyBatis技术交流群:188972810,或扫描二维码:


【MyBatis学习笔记】系列之预备篇一:ant的下载与安装

【MyBatis学习笔记】系列之预备篇二:ant入门示例

【MyBatis学习笔记】系列之一:MyBatis入门示例

【MyBatis学习笔记】系列之二:MyBatis增删改示例

【MyBatis学习笔记】系列之三:MyBatis的association示例

【MyBatis学习笔记】系列之四:MyBatis association的两种形式

【MyBatis学习笔记】系列之五:MyBatis与Spring集成示例

【MyBatis学习笔记】系列之六:MyBatis与Spring集成示例续

【MyBatis学习笔记】系列之七:MyBatis一对多双向关联

【MyBatis学习笔记】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis学习笔记】系列之九:MyBatis collection的两种形式

【MyBatis学习笔记】系列之十:MyBatis日志之Log4j示例

【MyBatis学习笔记】系列之十一:MyBatis多参数传递之注解方式示例

【MyBatis学习笔记】系列之十二:MyBatis多参数传递之默认命名方式示例

【MyBatis学习笔记】系列之十三:MyBatis多参数传递之Map方式示例

【MyBatis学习笔记】系列之十四:MyBatis中的N+1问题

【MyBatis学习笔记】系列之十五:MyBatis多参数传递之混合方式

【MyBatis学习笔记】系列之十六:Spring声明式事务管理示例

【MyBatis学习笔记】系列之十七:MyBatis多对多保存示例

【MyBatis学习笔记】系列之十八:MyBatis多对多关联查询示例

【MyBatis学习笔记】系列之十九:如何在MyBatis-3.2.7中使用Log4j2 rc2

MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(一)

MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)

转载于:https://blog.51cto.com/legend2011/1173787

MyBatis多参数传递之混合方式——MyBatis学习笔记之十五相关推荐

  1. JavaScript学习笔记(十五)

    JavaScript学习笔记(十五) 事件 事件是DOM(文档对象模型)的一部分.事件流就是事件发生顺序,这是IE和其他浏览器在事件支持上的主要差别. 一.事件流 1.冒泡型事件 IE上的解决方案就是 ...

  2. OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()

    OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D() 一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式. ...

  3. MATLAB学习笔记(十五)

    MATLAB学习笔记(十五) 一.非线性方程求解与函数极值计算 1.1 非线性方程数值求解 1.2 函数极值的计算 1.2.1 无约束最优化问题 1.2.2 有约束最优化问题 一.非线性方程求解与函数 ...

  4. 学习笔记(十五)——镜像的知识点与注意事项

    学习笔记(十五)--镜像的知识点与注意事项 一.基础知识 1.SQL Server镜像只有两种模式:高安全模式和高性能模式.两种模式的主要区别在于在事务提交后的操作. 在高性能模式下,主体服务器不需要 ...

  5. cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)

    cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断) https://blog.csdn.net/qq_16255321/article/details/43086 ...

  6. Cty的Linux学习笔记(十五——wget)

    Linux学习笔记--第十五篇 wget命令用于在终端中下载网络文件,格式为"wget  [参数]  下载地址" 参数: -b:后台下载模式 -P:下载到指定目录 -t:最大尝试次 ...

  7. 学习笔记(十五)——MySQL(查询)

    查询方法 下面的查询都是对单表的查询,所以先创建表tb1(下面的tb1均代表此表) create table tb1(id int,name varchar(10),age int,class var ...

  8. input回车触发事件_JavaScript学习笔记(十五)-- Event事件(上)

    EVENT(上) 之前我们简单的了解过一些事件,比如 onclick / onload / onscroll / ... 今天开始,我们详细的学习一些 事件 什么是事件 一个事件由什么东西组成 触发谁 ...

  9. Python学习笔记(十五):类基础

    以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-24 23:59 学习笔记 1,Python中的大多 ...

最新文章

  1. Bootstrap 4 正式发布,却可能生不逢时
  2. GuozhongCrawler系列教程 (4) StartContext具体解释
  3. Python正则表达式之额外补充(7)
  4. pmp每日三题(2022年3月14日)
  5. Redis 总结精讲 看一篇成高手系统 四
  6. python学习笔记之——range()函数
  7. IOS客户端Coding项目记录(二)
  8. cad图框尺寸标准图_工程必备 | CAD图纸1:100打印可以量取的尺寸
  9. Vue实现组件props双向绑定解决方案
  10. [渝粤教育] 盐城工学院 水处理微生物学 参考 资料
  11. ajax搜索思路,jquery创建一个ajax关键词数据搜索实现思路
  12. 常用sql 全记录(添加中)
  13. Mysql 导出 sql的执行结果到 csv文件
  14. linkedin领英账号限制被封了怎么办?
  15. matlab批量将图片反色
  16. leapftp,leapftp怎么上传文件
  17. 安卓按键命令库教程(紫猫版)
  18. (简单实用小技巧)在浏览器如何打开php文件
  19. ArcGIS批量按要素裁剪(应用模型)
  20. 服务器sel信息是什么意思,英特尔?服务器主板 — 如何解压和读取的服务器事件日志(SEL)...

热门文章

  1. Python爬虫使用浏览器的cookies:browsercookie
  2. JavaScript错误信息
  3. nfs:server 172.168.1.22 not responding,still trying arm客户端配置
  4. 不是纸上谈兵,VR原来真的可以缓解抑郁症
  5. Android -- ViewGroup源码分析+自定义
  6. 俄罗斯Mail.Ru云端部署视频的技术架构解析
  7. LNMP - nginx代理详解
  8. SQL-SERVER2008登录错误233
  9. (推荐)(提供下载)ORACLE常见问题一千问(不怕学不成、就怕心不诚!)
  10. Linux 命令(112)—— unalias 命令(builtin)