ResultMap结果映射 的问题

ResultMap结果映射 的问题

老师您好,自己在调试中发现的意外问题。

前提:ResultMap结果映射  的映射规则已经配置好,ResultDTO类也创建好了。

但ResultDTO类当中的

private Goods goods;
private Category category;

并没有实例化。

为什么调试时还是能正常运行?

http://img1.sycdn.imooc.com//climg/5dc7f84b0909f08910300173.jpg

这段代码并没有发生异常,而是正常输出了所有goods类的title和category类的categoryName。

是谁将它实例化了?

望老师解答。麻烦了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好。for循环遍历的是MyBatis得到的list中的内容。这个list以及其中的对象等是MyBatis帮我们实例化的。

下面来讲一下MyBatis的解析过程:

1、在执行到sqlSession.selectList("goods.selectGoodsDTO")时,MyBatis会根据“goods”找到namespace为goods的http://img1.sycdn.imooc.com//climg/5dc8cf7e092d963d06460158.jpg


2、找到以selectGoodsDTO为id的sql标签,执行sql语句,由于我们指定了resultMap,MyBatis就会将结果集按照指定的resultMap来解析:

http://img1.sycdn.imooc.com//climg/5dc8cdec0979592d08060116.jpg


3、在结果映射这一步,我们按照不同的属性名进行了指定,MyBatis就将对应属性实例化,并且将参数都放入其中,组装出GoodsDTO对象:

http://img1.sycdn.imooc.com//climg/5dc8d05109f34fd409750587.jpg

最后,由于我们是按照selectList来查找的。MyBatis就知道要给我们组装List了。用来接收的集合List<GoodsDTO>,这里泛型和resultMap中的type需一致。


如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 超人迪加123 提问者 #1
    那么平时创建ResultDTO类的时候,里面的private Goods goods;和private Category category;到底要不要实例化?还是等mybatis帮我们实例化?工作中推荐哪种做法?
    2019-11-12 13:53:22
  • 芝芝兰兰 回复 提问者 超人迪加123 #2
    同学你好。我们之后的学习中,会将类的创建和初始化任务都交给Spring和MyBatis来替我们完成,之后的代码中会减少new的次数,这也是为了进一步解耦。在这里当然是使用源码中的方式,而不是自己new更为合适。在工作中要看项目本身的架构,但一般都是框架帮助完成的。祝学习愉快~
    2019-11-12 14:55:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师