MyBatis 的一对多查询可以通过在 <resultMap>
标签中使用 <collection>
标签,将查询结果映射成 Java 对象的嵌套集合。具体步骤如下:
-
在
<resultMap>
中使用<collection>
标签
在 <resultMap>
标签中使用 <collection>
标签,并指定 property
属性为嵌套集合的属性名,column
属性为关联表中的外键列名,javaType
属性为嵌套集合中元素的类型。
<resultMap id="BaseResultMap" type="com.example.goods_admin.entity.Goods">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="price" jdbcType="INTEGER" property="price" />
<result column="status" jdbcType="VARCHAR" property="status" />
<!-- 嵌套集合 -->
<collection property="imageUrlList" ofType="com.example.goods_admin.entity.GoodsImg">
<result property="imgId" column="imgId"/>
<result property="goodsId" column="goodsId"/>
<result property="imageName" column="imageName"/>
<result property="imageUrl" column="imageUrl"/>
</collection>
</resultMap>
-
编写 SQL 查询语句
编写 SQL 查询语句,使用 JOIN 操作关联两张表
<select id="selectGoods" resultMap="BaseResultMap" parameterType="com.example.goods_admin.entity.Goods">
SELECT
g.id,g.name,g.price,g.status,gi.goodsId ,gi.imageName,gi.imageUrl,gi.imgId
FROM
goods g
LEFT JOIN goods_img gi ON g.id = gi.goodsId
<where>
g.`status`='1'
<if test="keyWord !=null and keyWord!=''">
and g.name like concat('%', #{keyWord}, '%')
</if>
<if test="id !=null and id!=''">
and g.id =#{id} and gi.`status`='1'
</if>
</where>
</select>
-
调用查询方法