Mybaits 3.2.6设计的一个缺陷,欢迎拍砖交流
最近在研读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设计的一个缺陷,欢迎拍砖交流相关推荐
- 一个缺陷管理系统数据库设计和界面设计分析
在Winform方面,基于业务的不同,我们可以利用工具的效率,快速做很多不同的业务系统,前期做了一个缺陷管理系统,想把单位的测试业务规范下,也好统计和分析每个版本的缺陷信息,本篇整理这些数据库设计和界 ...
- 响应式网页设计代码_消除响应式网站建设设计中的缺陷
在过去的5年里,移动流量的份额增长了20%,现在响应式网站设计已经被认为是理所当然的了.到2020年,您可以通过手机几乎可以访问任何网站,它会很好用.大多数用户如果看到一个网站在他们的智能手机或平板电 ...
- 手把手教你如何自己设计实现一个深度学习框架(附代码实现)
作者丨王桂波@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/78713744 编辑丨极市平台 导读 本文首先从深度学习的流程开始分析,对神经网络中的关键组件抽象,确定 ...
- 缺陷管理-基于企业微信文档设计的一个缺陷管理文档
基于企业微信文档设计的一个缺陷管理文档 虽然禅道.jira很好用,但对于开发周期较短的项目,将项目部署到禅道或jira中会有些许繁琐(老板讲的,不是我认为的).既然无法要求团队使用什么工具,那就改变自 ...
- 如何设计出一个有灵魂的「签到功能」?
本文为PMCAFF专栏作者迷路的威廉出品 提到签到功能,想必是个人都并不陌生,有些人对它可能嗤之以鼻,不屑于去签到,有些人则可能是乐此不疲,深深陷入其中. 说实话,签到确实是一种基础功能,有的PD认为 ...
- 小王利用计算机设计了一个计算程序,七年级数学上册5.3代数式的值巧求计算机里的代数式的值素材(新版)青岛版...
巧求计算机里的代数式的值 随着社会的发展,电脑已进入了寻常百姓家,为既能培养学生学习电脑的兴趣,又能培养学生的应用意识,各地中考试题出现了以计算机为背景的许多题目,解决这类题目的关键在于搞清计算机程序 ...
- 软件体系结构设计文档_一个java架构师是如何设计出一个好的架构的
一.架构的定义 所谓一千个架构师中有一千种"最好的架构"模式. "架构"是我们行业中非常普遍的词,表示它也必须是经过长时间磨合后形成的词. 架构一词的含义是什么 ...
- 操作系统课设——设计模拟一个SPOOLING假脱机输出程序
广州大学操作系统课程设计报告 要求:书写课程设计报告,报告中应该包含如下内容: 一.课程设计题目及内容 课程设计题目:题目三: 设计模拟一个SPOOLING假脱机输出程序 (1) 系统设计要求:设计一 ...
- python软件菜单如何设计_佩服!我用Python设计了一个签名软件
原标题:佩服!我用Python设计了一个签名软件 临近年末,大家都忙着签发礼品,写的一手好的签名,会让大家更有成就感,今天,小安就带领大家来设计一个基于tkinter+爬虫的签名设计软件,方便大家设计 ...
- orcad如何设置模块化设计_这个模块化的办公桌让您设计每一个元素,以创造完美的工作设置...
可以说,右桌子是每个工作区最重要的补充.他们为每个工作日的组织.创造力和生产力设定了基调和节奏.随着时间的推移,办公桌以某种方式最终成为坐在他们身后的人的化身,或者变得凌乱不堪,为那些头脑分散的创意人 ...
最新文章
- mysql锁表_MYSQL锁表问题的解决方法
- bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总
- 科技管理第一课 导论 课程笔记
- ios设置中性黑体_ios 解决自定义字体无法显示问题
- ElasticSearch简介与安装
- 解决夜神模拟器无法联机调试 adb server version (**) doesn't match this client (**); killing...
- pyqt5 点击开始执行_《快速掌握PyQt5》第一章 PyQt5的起点
- Razor语法(四)
- matebook14支持触摸屏吗_matebook 14有触屏吗
- Codeforces 165D Beard Graph 边权树剖+树状数组
- POJ2002 Squares
- C语言程序设计第五版 谭浩强 第六章 答案
- 客快物流大数据项目(五十一):数据库表分析
- matlab plc控制系统设计,基于MATLAB的PLC温度监控系统设计
- [经验]iOS开发-记录下在开发过程中遇到的问题的解决方案及经验总结-1
- 官方|TensorFlow微信公众号发布
- 更完整的服务!LG将成为苹果Airplay第一台智慧电视
- skip connections
- unity中的C#编程-零基础(Unity2017)
- 正则表达式中 前瞻,后顾,负前瞻,负后顾等整理