mybatis collection的嵌套查询问题

iails iails 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
三张表:

create table stu(
sno int auto_increment primary key ,
sname varchar(10)
);
create table class (
cid int auto_increment primary key,
cname varchar(10)
);
create table cs (
cid int,
sno int,
foreign key(cid) references class(cid),
foreign key(sno) references stu(sno)

);

数据:

insert into stu values (0,'stu1');
insert into stu values (0,'stu2');
insert into stu values (0,'stu3');
insert into stu values (0,'stu4');
insert into stu values (0,'stu5');

insert into class values (0,'class1');
insert into class values (0,'class2');

insert into cs values (1,1);
insert into cs values (1,2);
insert into cs values (2,3);
insert into cs values (2,4);
insert into cs values (2,5);

每个班级有多个学生

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iails.site.dao.ClazzMapper">

<!-- 第一种方式 -->
<resultMap id="getList2ResultMap" type="com.iails.site.entity.Clazz">
<id property="classId" column="cid"/>
<result property="className" column="cname"/>
<collection property="students" column="cid" ofType="com.iails.site.entity.Student"
select="getList2Student">
<id property="studentId" column="sno"/>
<result property="studentName" column="sname"/>
</collection>
</resultMap>

<select id="getList2Student" resultType="com.iails.site.entity.Student">
select *
from stu,cs
where stu.sno=cs.sno and #{cid}=cs.cid
</select>
<select id="getList2" resultMap="getList2ResultMap">
select *
from class
</select>


<!-- 第二种方式 -->
<resultMap id="getListResultMap" type="com.iails.site.entity.Clazz">
<id property="classId" column="cid"/>
<result property="className" column="cname"/>
<collection property="students" column="cid" ofType="com.iails.site.entity.Student">
<id property="studentId" column="sno"/>
<result property="studentName" column="sname"/>
</collection>
</resultMap>

<select id="getList" resultMap="getListResultMap">
select *
from stu, class, cs
where class.cid=cs.cid and stu.sno=cs.sno
</select>
</mapper>


问题是:第二种方式没问题,第一种方法查询出来Class对象的Students列表有值,数目也符合,但是值为null

[{"classId":1,"className":"class1","students":[null, null]}, {"classId":2,"className":"class2","students":[null, null, null]}]

并且如果Student的属性名和stu的字段名完全一致或者把ofType和getList2Student的resultType改为"map"又可以映射成功。
是需要配置什么吗?
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
iails
Web 开发 81,108 成员 341,721 内容