0
点赞
收藏
分享

微信扫一扫

Mybati通过collection实现级联列表查询,实现自动封装List数据

飞空之羽 2022-02-21 阅读 86

在开发中,比如我们两个表,一个主表和一个子表,并且是一对多的关系。

我们想要实现一种数据格式,一个实体中有一些主表字段,和一个List子表实体

实体结果如下:

// 子表实体
public class Car{
    private String id;
    private String userId;
	private String carName;
	private Double money;
	private String color;
}

// 主表实体
public class UserInfo{
    private String id;
	private String user;
	private Integer age;
	private String mbile;
	private List<Car> carList

Json结果如下:

{
   "id":"123",
   "user":"zhangsan",
   "age":20,
   "mbile":"123456",
   "carList":[
    { "id":"1","userId":"123","carName":"大众","money":111.22,"color":"green"},
    { "id":"2","userId":"123","carName":"宝马","money":222.22,"color":"white"},
    { "id":"3","userId":"123","carName":"本hi","money":333.22,"color":"grey"}
   ]
}

方式一:
为了实现上述的数据结构,可以通过Java代码实现,逻辑为:先查询出主表的列表数据然后根据主表ID再查询子表的列表数据,然后通过setList()方法封装数据;

方式二:
使用Mybati提供的collection标签,在查询时直接封装好数据,然后返回给Java

创建resultMap标签:

    <resultMap id="UserInfoResultMap" type="com.org.UserInfo">
        <id column="a_id" jdbcType="VARCHAR" property="id"/>
        <result column="a_user" jdbcType="VARCHAR" property="user"/>
        <result column="a_age" jdbcType="INTEGER" property="age"/>
        <result column="a_mbile" jdbcType="VARCHAR" property="mbile"/>
        <collection property="carList" ofType="com.org.Car">
            <id column="b_id" jdbcType="VARCHAR" property="id"/>
            <result column="b_user_id" jdbcType="VARCHAR" property="userId"/>
            <result column="b_car_ame" jdbcType="VARCHAR" property="carName"/>
            <result column="b_money" jdbcType="NUMERIC" property="money"/>
            <result column="b_color" jdbcType="VARCHAR" property="color"/>
        </collection>
    </resultMap>

编写SQL:

    <select id="selectUserInfo" resultMap="UserInfoResultMap">
        select
            a.id as a_id,a.user as a_user,a.age as a_age,a.mbile as a_mbile,
            b.id as b_id,b.userId as b_user_d,b.carName as b_car_name,b.money as b_money,b.color as b_color
        from userInfo a
        left join car ON a.id = b.user_id
    </select>

注意:
<collection>标签可以嵌套多层,只要与相应对象的实体字段匹配就行,比如:实体类是四层List循环,那么就有四层collection标签循环。

举报

相关推荐

0 条评论