之前遇到过mybatis级联查询测试数据库能查有记录但日志中装入集合的结果为空的问题。
解决如下:
VolumeCustomMapper.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.qcacg.mapper.VolumeCustomMapper">
<resultMap id="ContentResultMap" type="com.qcacg.entity.ContentEntity">
<id column="contentId" property="contentId"/>
<result column="contentTitle" property="contentTitle"/>
</resultMap>
<resultMap id="VolumeResultMap" type="com.qcacg.entity.volume.VolumeCustom">
<id column="volumeId" property="volumeId"/>
<result column="volumeName" property="volumeName"/>
<collection property="contentEntityList" ofType="com.qcacg.entity.ContentEntity" resultMap="ContentResultMap"/>
</resultMap>
<select id="findVolumeAndContentByBookId" resultMap="VolumeResultMap" parameterType="java.lang.Long">
SELECT
wor_volume.VolumeId AS volumeId,
wor_volume.VolumeName AS volumeName,
wor_content.ContentId AS contentId,
wor_content.ContentTitle AS contentTitle
FROM
wor_content INNER JOIN
wor_volume
ON
wor_volume.VolumeId = wor_content.VolumeId
WHERE
wor_volume.BookId = #{wor_volume.BookId}
</select>
<select id="findContentByVolumeIdAndBookId" resultMap="ContentResultMap" parameterType="java.lang.Long">
SELECT
wor_content.ContentId AS contentId,
wor_content.ContentTitle AS contentTitle
FROM
wor_content
WHERE wor_content.VolumeId IN
(SELECT wor_volume.VolumeId FROM wor_volume
WHERE wor_volume.BookId = #{wor_volume.BookId})
</select>
</mapper>
通用mapper做一对多查询时在pojo中增加List字段需要增加@Transient注释