老师,能在解释一下这些?还有那个id=“getAddress”的#{id},是在哪里传入的参数呢?

老师,能在解释一下这些?还有那个id=“getAddress”的#{id},是在哪里传入的参数呢?

正在回答 回答被采纳积分+1

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

3回答
芝芝兰兰 2019-10-17 10:57:03

同学你好,可能我的表述方式不够清楚让同学误会了,让我重新换个思路再给同学说明一遍。

这里先明确我们要解决的问题是,在查询User对象的时候,希望它对应的多个Address能够填充到对象的地址集合属性中。

1、通过findUsers,我们找到了一个结果集,这里含有所有user表中的字段。这个结果集需要按照resultMap指定的规则映射到实体对象,于是MyBatis开始解析ResultMap。

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

2、通过ResultMap中的id、result等标签,id和username都映射到了User对象中。下面遇到了collection标签。MyBatis中的collection标签是用来映射集合属性的。所以需要另一个查询查出一个集合来,组装出集合对象再放入当前这个User对象中。http://img1.sycdn.imooc.com//climg/5da7d29209ac1c9d12980284.jpg

3、在collection标签中,select指明了使用哪个查询结果来填充集合,property指定了User中需要被填充的参数名。column指定了用当前findUsers结果集中的哪一列来作为参数提供给这个select指定的查询,即user表中的id这一列作为参数依据它查询address表。ofType指定了需要映射的集合中每个元素的类型。http://img1.sycdn.imooc.com//climg/5da7d7d709b6e12c13460404.jpg

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

祝学习愉快~

  • 提问者 精慕门618366 #1
    老师,之所以将查询出来的结果集映射到user实体类中,是因为resultmap的type是com.damu.entity.users? 其它与user表字段名相同的在这里就默认对应user实体类了? 不使用id标签不行?不也是默认映射user实体类?
    2019-10-17 13:07:10
  • 芝芝兰兰 回复 提问者 精慕门618366 #2
    同学你好。是的,之所以将查询出来的结果集映射到user实体类中,是因为resultmap的type是com.damu.entity.users。id标签在这里是为了标识哪个是主键,在这种嵌套结果映射的情况下,可以提高性能。而其他属性与字段名相同的在这里就默认对应了。祝学习愉快~
    2019-10-17 13:40:18
提问者 精慕门618366 2019-10-16 20:30:03

oftype又是什么呢

芝芝兰兰 2019-10-16 18:17:21

同学你好。

1、resultMap可以看做是组装一个接收的中转站,将查询出的结果集,指定字段映射到对应实体对应属性上,使用它的是下面这个查询:

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


2、MyBatis在进行解析时,将findUsers查询出的id这一列作为参数,传递给了getAddress这个查询中。并将其查询结果生成一个Address类型的集合,并且将其对应到了addresses属性。


3、通过以上,我们得到了一个完整的User对象,其中的address属性的集合来源于getAddress查询出的结果集。其余的属性来源于findUsers查询出的结果集。


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

祝学习愉快~


  • 提问者 精慕门618366 #1
    最后我们会得到一个对象,那这个对象会返回给使用findusers的语句吗? 还有为什么要绑定主键? collection里面的id为什么是给getaddress那个配置了呢?
    2019-10-16 19:27:01
  • 提问者 精慕门618366 #2
    那个collection不是很懂
    2019-10-16 19:42:45
  • 提问者 精慕门618366 #3
    那个collection不是很懂
    2019-10-16 19:42:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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