老师,Mybatis中OneToMany和ManyToOne问题。
collection标签是不是用在某个属性是多的情况下,对方是多的情况下(一对多)?
associate标签是不是用在某个属性是一的情况下,对方是一的情况下(多对一)?
在collection,associate这两个标签中的colum要写什么,是哪个表中的字段?
在collection,associate这两个标签中的<result>和<id>标签中的column是否能跟以上的有过的column一样
那么如果是多对多的关联该怎么写呢?
正在回答
同学你好,不可以sql语句不起别名,然后column都是name。
如果sql语句不起别名,那么mybatis在查询时只会保留第一次查询到的列值,结果不会出现好几列name。例如select c.desc , t.desc from...;那么,由于c.desc在前,t.desc在后,所以查询到的desc值是c表中的desc值,不能查询到t表的desc值。
同学如果想要获得2个表中的desc值,就需要起别名哦。
祝学习愉快~
同学你好,
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_name, student.name stu_name from class,student where 表连接条件;
resultMap中获得班级表name值应该是column="cla_name"。获得学生表中name值应该是column="stu_name"
祝学习愉快~
同学你好,
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属性是不一样的。
如下:
4、老师可以教多个班级,一个班级可以有多个老师。这里以老师和班级多对多关系为例,实现多对多关系,代码如下:
a. 实体类如下:
b. 数据库中表数据如下:
c.xml中多对多查询如下:
d. 测试结果如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星