老师,Mybatis中OneToMany和ManyToOne问题。

老师,Mybatis中OneToMany和ManyToOne问题。

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

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

  1. collection标签是不是用在某个属性是多的情况下,对方是多的情况下(一对多)?

    associate标签是不是用在某个属性是一的情况下,对方是一的情况下(多对一)?

  2. 在collection,associate这两个标签中的colum要写什么,是哪个表中的字段?

  3. 在collection,associate这两个标签中的<result>和<id>标签中的column是否能跟以上的有过的column一样

  4. 那么如果是多对多的关联该怎么写呢?

正在回答

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

3回答

同学你好,不可以sql语句不起别名,然后column都是name。

如果sql语句不起别名,那么mybatis在查询时只会保留第一次查询到的列值,结果不会出现好几列name。例如select c.desc , t.desc from...;那么,由于c.desc在前,t.desc在后,所以查询到的desc值是c表中的desc值,不能查询到t表的desc值。

同学如果想要获得2个表中的desc值,就需要起别名哦。

祝学习愉快~

好帮手慕阿慧 2020-10-09 16:09:07

同学你好,

1、column不能都是name,应该是查询时起的别名cname和dname。

 column表示数据库中的列。column中的cname和dname应该是sql语句查询的结果中的列名。例如select cname  cna  from db01;那么column就应该是查询得到的列名cna, 而不是原始的列名cname。

2、当多表关联,表之间有重复列名时,可以给列起别名。例如class班级表和studenet学生表中都有name,查询sql语句 例如:

select class.name cla_namestudent.name stu_name from class,student where 表连接条件;

resultMap中获得班级表name值应该是column="cla_name"。获得学生表中name值应该是column="stu_name"

祝学习愉快~

  • 提问者 超级金甲战士 #1
    sql语句不起别名,然后column都是name可以吗??那是不是结果会有好几列name?还是不行?
    2020-10-09 19:08:40
好帮手慕阿慧 2020-10-07 13:36:31

同学你好,

1、你的理解是正确的。

2、collection中column要写select中要传入的值,如select="goodsDetail.selectByGoodsId",要写一对多中 一方t_goods表中的的goods_id列名。

association中column要写select中要传入的值。如select="goods.selectById",需要传入多对一中多方t_goods_detail表中的goods_id列名。

3、在collection,associate这两个标签中的<result>和<id>标签中的column是用于将实体类中属性和数据库表中列名对应起来。跟collection,association标签中的column属性是不一样的。

如下:

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

4、老师可以教多个班级,一个班级可以有多个老师。这里以老师和班级多对多关系为例,实现多对多关系,代码如下:

a. 实体类如下:

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

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

b. 数据库中表数据如下:

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

c.xml中多对多查询如下:

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

d. 测试结果如下:

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

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 超级金甲战士 #1
    <resultMap id="claimVoucher" type="ClaimVoucher"> <id property="id" column="id" javaType="Integer"/> <result property="cause" column="cause" javaType="String"/> <result property="createSn" column="create_sn" javaType="String"/> <result property="createTime" column="create_time" javaType="java.util.Date"/> <result property="nextDealSn" column="next_deal_sn" javaType="String"/> <result property="totalAmount" column="total_amount" javaType="Double"/> <result property="status" column="status" javaType="String"/> <association property="creater" column="create_sn" javaType="Employee"> <result property="name" column="cname" javaType="String"/> <result property="post" column="cpost" javaType="String"/> </association> <association property="dealer" column="next_deal_sn" javaType="Employee"> <result property="name" column="dname" javaType="String"/> <result property="post" column="dpost" javaType="String"/> </association> </resultMap> 在上面这段代码中,<result property="name" column="cname" javaType="String"/>和<result property="name" column="dname" javaType="String"/> 里面的column能否都为name(表中的列名)??,这边使用的是sql语句查询的时候的别名cname和dname。 假如在两个关联的上面还有一个result <result property="name" column="name" javaType="String"/>又是否可以和关联里的column重名???还是都要写不一样的??
    2020-10-09 11:52:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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