数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

mybatis:嫌弃resultType很久,殊不知resultType才是无敌的存在!!-CSDN论坛

来源:互联网  责任编辑:小易  时间:2018/1/21 10:29:44
本网有用户碰到这样的问题:mybatis:嫌弃resultType很久,殊不知resultType才是无敌的存在!!-CSDN论坛,具体问题如下:

本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:

解决方案1:

不明嚼个厉。

解决方案2:

如果看不到合适的地方用合适的类型,那么就还没学明白

解决方案3:

你要知道:写起来方便用起来难受,写起来麻烦用起来舒服

解决方案4:

返回值是不建议使用map的,前几天看的阿里的开发规范,是严格禁止使用map作为返回值的。
该费时间去写的,你还是得花点时间。

解决方案5:

引用 4 楼 zwy0123 的回复:
返回值是不建议使用map的,前几天看的阿里的开发规范,是严格禁止使用map作为返回值的。
该费时间去写的,你还是得花点时间。

唉,为啥哩

解决方案6:

引用 3 楼 u011320740 的回复:
你要知道:写起来方便用起来难受,写起来麻烦用起来舒服

用起来也挺方便的感觉

解决方案7:

resultType一对多不是很方便,不如resultMap,其他的倒没什么。

解决方案8:

用Map返回结果不适合拓展,你的方法自己用可以,给别人用还要看你的SQL里返回了什么,在清单功能里,用Map返回查询结果不方便用反射写文件。

解决方案9:

一对多还是用resultMap好些

解决方案10:

引用 7 楼 m2200 的回复:
resultType一对多不是很方便,不如resultMap,其他的倒没什么。

一对多也照样查的出来吧,比如  1个用户 2个订单  ,就查询出两条记录      用户a  订单1    ,用户a 订单2 ,这样前台展示也方便
如果是resultMap的话 是这样的:
用户a(订单1、订单2),我有个疑问,不太明白,这样的话,前台页面要怎么通过循环展示结果列表?求教

解决方案11:

引用 10 楼 x18094 的回复:
Quote: 引用 7 楼 m2200 的回复:

resultType一对多不是很方便,不如resultMap,其他的倒没什么。

一对多也照样查的出来吧,比如  1个用户 2个订单  ,就查询出两条记录      用户a  订单1    ,用户a 订单2 ,这样前台展示也方便
如果是resultMap的话 是这样的:
用户a(订单1、订单2),我有个疑问,不太明白,这样的话,前台页面要怎么通过循环展示结果列表?求教


是的,你也知道是这种结果,不能合并一的那一方,多的那一方是几,就查出几条记录,你要手动写代码合并。

直接拿你查出来的结果集在页面上显示出来,还不重复,太难,不如手动合并下。

思路是根据一的那一方的主键ID来合并,ID相同的合并。

解决方案12:

 还有就是类型转换问题,你直接用map,有些值的类型转换后不是你想要的类型,就会出现问题。

反例:某同学为避免写一个<resultMap>,直接使用 HashTable 来接收数据库返回结果,结果
出现日常是把 bigint 转成 Long 值,而线上由于数据库版本不一样,解析成 BigInteger,导
致线上问题。

解决方案13:

引用 11 楼 m2200 的回复:
Quote: 引用 10 楼 x18094 的回复:

Quote: 引用 7 楼 m2200 的回复:

resultType一对多不是很方便,不如resultMap,其他的倒没什么。

一对多也照样查的出来吧,比如  1个用户 2个订单  ,就查询出两条记录      用户a  订单1    ,用户a 订单2 ,这样前台展示也方便
如果是resultMap的话 是这样的:
用户a(订单1、订单2),我有个疑问,不太明白,这样的话,前台页面要怎么通过循环展示结果列表?求教


是的,你也知道是这种结果,不能合并一的那一方,多的那一方是几,就查出几条记录,你要手动写代码合并。

直接拿你查出来的结果集在页面上显示出来,还不重复,太难,不如手动合并下。

思路是根据一的那一方的主键ID来合并,ID相同的合并。

那就说 多对一的时候  是没问题的,就是需求要求就要这样显示的时候,  a   1    a   2

解决方案14:

引用 12 楼 zwy0123 的回复:
 还有就是类型转换问题,你直接用map,有些值的类型转换后不是你想要的类型,就会出现问题。

反例:某同学为避免写一个<resultMap>,直接使用 HashTable 来接收数据库返回结果,结果
出现日常是把 bigint 转成 Long 值,而线上由于数据库版本不一样,解析成 BigInteger,导
致线上问题。

好吧~~~

解决方案15:

引用 12 楼 zwy0123 的回复:
 还有就是类型转换问题,你直接用map,有些值的类型转换后不是你想要的类型,就会出现问题。

反例:某同学为避免写一个<resultMap>,直接使用 HashTable 来接收数据库返回结果,结果
出现日常是把 bigint 转成 Long 值,而线上由于数据库版本不一样,解析成 BigInteger,导
致线上问题。
不错的经验,收下了

解决方案16:

引用 12 楼 zwy0123 的回复:
 还有就是类型转换问题,你直接用map,有些值的类型转换后不是你想要的类型,就会出现问题。

反例:某同学为避免写一个<resultMap>,直接使用 HashTable 来接收数据库返回结果,结果
出现日常是把 bigint 转成 Long 值,而线上由于数据库版本不一样,解析成 BigInteger,导
致线上问题。


受教了

解决方案17:

我们公司分布式开发,模块之间前期都是用map取值,然后沟通成本大大提升。

解决方案18:

每个类型的存在都是有特定意义的, 还是要区分场景。

解决方案19:

各有各好处  没有无敌的存在 只有适合的存在

解决方案20:

我现在是经常用resultType(map),感觉很方便。但是map有个不好的就是,如果查询的字段值为null,map就不没有该字段。
sql里面需要做个判断ifnull。


解决方案21:

引用 8 楼 secoler 的回复:
用Map返回结果不适合拓展,你的方法自己用可以,给别人用还要看你的SQL里返回了什么,在清单功能里,用Map返回查询结果不方便用反射写文件。


+1
虽然本人没用过 iBatis,但看楼主介绍的内容里,似乎和 C# 里的 DataTable 很类似,就是取一行数据时通过传入字段名取字段值
这种情况下,如果一个项目小,只有一两个人搞定还好办,人多了就麻烦死了。当初我参与一个C#项目,那项目里所有的数据库访问全部是使用 DataTable,就和楼主说的List<Map<String, Object>> 类似,数据访问层由另外一个工程师封装好,而我为了取一个数据库字段,就必须传个字符串给一个行(就象楼主说的Map),但这个字符串应该传什么值?为了确保我不记错,就必须阅读他的DAO层源代码,查看SQL语言甚至数据库里的存储过程。总之那些日子每天访问数据库就是吐槽,再也不想用 DataTable了。

总结一下这种方式(List<Map<String, Object>>)有什么不足
1、取字段值时必须传个字符串给 Map,而这个 Map 很容易给程序员带来困惑,DAO 的使用者时常需要阅读DAO的源代码才能确定应该传什么字符串给 Map
2、一旦数据库字段名称、类型发生变化,程序员必须扫描所有的源代码进行修改,然后测试所有的可能
3、一旦字符串写错,程序员很难察觉,编译器也不会报错,测试也不一定会走到那条语句,隐患留到了最后发布版本里

这种方式对DAO封装者来说是很省事,但是对调用者来说简直是噩梦。当初经常因为改了数据库上一点点东西,就把所有代码全部排查一遍,然后不断地测试测试测试……
后面做的项目里,我们都使用ORM模式进行封装,基本上只要数据DAO层做好修改,再利用编译器报的错误,基本上都会把该改的问题全部找到,测试量少了很多很多很多

解决方案22:

严格约束全部使用resultType,如果用resultMap说明持久层管理太松散。

解决方案23:

我也经常会面临这个问题,一般规定的返回值都是map,但是有的时候也是看需求的,你需要查询的数据是什么 根据你要查找的数据来决定是使用resultType和resultMap ,另外 很好奇楼主说的qo类是什么?是指pojo吧?我们一般都称model

解决方案24:

用map接收的确可行,但是不一定好,比如你想看到这个map中接收的是哪些参数,你可能就需要到数据库取看字段
map中的key的大小写是一般是和数据库字段大小写一致的,如果在定义字段的时候没有注意这个问题,可能在之后的获取过程中会相当麻烦。

解决方案25:

增改 用resultMap 查删 用resultType

解决方案26:

update, delete可以使用resultType指定int, select单个结果也可以使用resultType指定int, 或者string. 但是多个结果并不推荐使用resultType, 而应该使用resultMap明确结果类型. 首先存在转型问题(先向上转Object, 再向下转具体类型), 其次不同数据库版本之可能存在解析不一致导致向下转型错出现ClassCastException或者出现丢失精度的问题.

  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved