最近在研读Mybaits 3.2.6的源码,发现设计的一个缺陷,欢迎拍砖交流

在SqlSession接口中,有这样一个方法:

/**
   * The selectMap is a special case in that it is designed to convert a list
   * of results into a Map based on one of the properties in the resulting
   * objects.
   * @param <K> the returned Map keys type
   * @param <V> the returned Map values type
   * @param statement Unique identifier matching the statement to use.
   * @param parameter A parameter object to pass to the statement.
   * @param mapKey The property to use as key for each value in the list.
   * @return Map containing key pair data.
   */
  <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);

这个方法的翻译是查询返回Map,参数含义依次为语句id,参数对象,结果集的作为key的属性列名。

缺陷就在于mapKey,mapKey要标识每一行记录,大家第一想到就是表id了,id一般都不是数字,而Mybaits偏偏给你定义为字符串,太扯蛋了吧。另外,如果有复合主键的情况,也是有问题的。

所以id不能作为mapKey参数使用。因此这个方法实际上没用,无法使用!

改进的思路,将mapKey设置为String类型不变,而在填充Map结果集时候,进行包装即可,如果是数字,则使用StringValueOf(rs.getLong(mapKey))进行转换,或者直接rs.getString(mapKey),也可以搞定。

这样这个方法就强大很多了。

当然复合主键的问题还是不能解决,我觉得复合主键是表设计很矬的问题,不予理睬。

如果真想解决,mapKey可以通过约定,将多个列名用逗号分隔,比如 “code,key”,接收到参数后对参数进行分解,分别获取两个列名,然后分别getString("code")+getString("key")作为主键,也可以解决。

期待作者早日修正,则个文档也很矬,查询返回map竟然大批人在百度上问,没一个把mapKey含义说清楚的!

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/1384984,如需转载请自行联系原作者

Mybaits 3.2.6设计的一个缺陷,欢迎拍砖交流相关推荐

  1. 一个缺陷管理系统数据库设计和界面设计分析

    在Winform方面,基于业务的不同,我们可以利用工具的效率,快速做很多不同的业务系统,前期做了一个缺陷管理系统,想把单位的测试业务规范下,也好统计和分析每个版本的缺陷信息,本篇整理这些数据库设计和界 ...

  2. 响应式网页设计代码_消除响应式网站建设设计中的缺陷

    在过去的5年里,移动流量的份额增长了20%,现在响应式网站设计已经被认为是理所当然的了.到2020年,您可以通过手机几乎可以访问任何网站,它会很好用.大多数用户如果看到一个网站在他们的智能手机或平板电 ...

  3. 手把手教你如何自己设计实现一个深度学习框架(附代码实现)

    作者丨王桂波@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/78713744 编辑丨极市平台 导读 本文首先从深度学习的流程开始分析,对神经网络中的关键组件抽象,确定 ...

  4. 缺陷管理-基于企业微信文档设计的一个缺陷管理文档

    基于企业微信文档设计的一个缺陷管理文档 虽然禅道.jira很好用,但对于开发周期较短的项目,将项目部署到禅道或jira中会有些许繁琐(老板讲的,不是我认为的).既然无法要求团队使用什么工具,那就改变自 ...

  5. 如何设计出一个有灵魂的「签到功能」?

    本文为PMCAFF专栏作者迷路的威廉出品 提到签到功能,想必是个人都并不陌生,有些人对它可能嗤之以鼻,不屑于去签到,有些人则可能是乐此不疲,深深陷入其中. 说实话,签到确实是一种基础功能,有的PD认为 ...

  6. 小王利用计算机设计了一个计算程序,七年级数学上册5.3代数式的值巧求计算机里的代数式的值素材(新版)青岛版...

    巧求计算机里的代数式的值 随着社会的发展,电脑已进入了寻常百姓家,为既能培养学生学习电脑的兴趣,又能培养学生的应用意识,各地中考试题出现了以计算机为背景的许多题目,解决这类题目的关键在于搞清计算机程序 ...

  7. 软件体系结构设计文档_一个java架构师是如何设计出一个好的架构的

    一.架构的定义 所谓一千个架构师中有一千种"最好的架构"模式. "架构"是我们行业中非常普遍的词,表示它也必须是经过长时间磨合后形成的词. 架构一词的含义是什么 ...

  8. 操作系统课设——设计模拟一个SPOOLING假脱机输出程序

    广州大学操作系统课程设计报告 要求:书写课程设计报告,报告中应该包含如下内容: 一.课程设计题目及内容 课程设计题目:题目三: 设计模拟一个SPOOLING假脱机输出程序 (1) 系统设计要求:设计一 ...

  9. python软件菜单如何设计_佩服!我用Python设计了一个签名软件

    原标题:佩服!我用Python设计了一个签名软件 临近年末,大家都忙着签发礼品,写的一手好的签名,会让大家更有成就感,今天,小安就带领大家来设计一个基于tkinter+爬虫的签名设计软件,方便大家设计 ...

  10. orcad如何设置模块化设计_这个模块化的办公桌让您设计每一个元素,以创造完美的工作设置...

    可以说,右桌子是每个工作区最重要的补充.他们为每个工作日的组织.创造力和生产力设定了基调和节奏.随着时间的推移,办公桌以某种方式最终成为坐在他们身后的人的化身,或者变得凌乱不堪,为那些头脑分散的创意人 ...

最新文章

  1. mysql锁表_MYSQL锁表问题的解决方法
  2. bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总
  3. 科技管理第一课 导论 课程笔记
  4. ios设置中性黑体_ios 解决自定义字体无法显示问题
  5. ElasticSearch简介与安装
  6. 解决夜神模拟器无法联机调试 adb server version (**) doesn't match this client (**); killing...
  7. pyqt5 点击开始执行_《快速掌握PyQt5》第一章 PyQt5的起点
  8. Razor语法(四)
  9. matebook14支持触摸屏吗_matebook 14有触屏吗
  10. Codeforces 165D Beard Graph 边权树剖+树状数组
  11. POJ2002 Squares
  12. C语言程序设计第五版 谭浩强 第六章 答案
  13. 客快物流大数据项目(五十一):数据库表分析
  14. matlab plc控制系统设计,基于MATLAB的PLC温度监控系统设计
  15. [经验]iOS开发-记录下在开发过程中遇到的问题的解决方案及经验总结-1
  16. 官方|TensorFlow微信公众号发布
  17. 更完整的服务!LG将成为苹果Airplay第一台智慧电视
  18. skip connections
  19. unity中的C#编程-零基础(Unity2017)
  20. 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理

热门文章

  1. #pragma warning(disable 4786)
  2. 进程间通信(三)共享内存和信号量
  3. Java或Web中解决所有路径问题
  4. 实现SharePoint的无限潜力
  5. 872. Leaf-Similar Trees - LeetCode
  6. c#中,如何获取日期型字段里的年、月、日?
  7. 【Java并发编程】3、DelayQueue应用场景,多考生考试
  8. 引领移动协同需求Cnskype结合微信企业号推出企业办公、通讯整合方案
  9. ADO.NET数据访问模式
  10. Adversarial learned Inference(对抗学习推断器)