关于实体类中多层嵌套集合,用mybatis的collection标签可以快速实现

本文介绍了如何在实体类中处理多层嵌套集合的映射问题,通过MyBatis的collection标签,避免了循环赋值的方式,提高了效率。XML配置展示了collection的使用,强调了字段名与resultMap的对应关系,使得在MVC层可以直接调用接口,简化了赋值操作。

一,首先分析需求在有三个实体类的情况下,好比user类,Student,YearClass类,结构如下

//最外层类
public class user {
    private String name;
    private String age;

    private List<Student> students;
}

//中间层类
public class Student {

    private String school;

    private String addr;

    private List<YearClass> yearClasses;
}
//最内层类
public class YearClass {
    private String classNo;

    private int stuNum;

}



 由于本人工作经验不多,之前碰到这种情况,我都是用循环逐个赋值,但是这次由于对效率有效求,所以就舍弃之前的循环赋值的方法,就用了mybatis中collection标签进行嵌套赋值,这个方法真的写起来非常简便,比我之前那种笨方法好太多了。

二. XML层大概如下所示


    <resultMap id="BaseResultMap" type="com.java.model.User">
        <result column="NAME" property="name" jdbcType="VARCHAR"/>
        <result column="AGE" property="age" jdbcType="VARCHAR"/>
        <collection property="students" javaType="List" ofType="com.java.model.Student" resultMap="BaseResultMapTwo">

        </collection>
    </resultMap>

    <resultMap id="BaseResultMapTwo" type="com.java.model.Student">
        <result column="SCHOOL" property="school;" jdbcType="VARCHAR"/>
        <result column="addr" property="addr" jdbcType="VARCHAR"/>
        <collection property="yearClasses" javaType="List" ofType="com.java.model.YearClass" resultMap="BaseResultMapThree">

        </collection>
    </resultMap>

    <resultMap id="BaseResultMapThree" type="com.java.model.YearClass">
        <result column="CLASSNO" property="classNo;" jdbcType="VARCHAR"/>
        <result column="STUNUM" property="stuNum" jdbcType="INTEGER"/>
    </resultMap>

这中结构是在xml中将集合中的元素用了collection标签,而且可以多级嵌套(能多少我也不清楚,我最多是三层,更多没试过)

而且这样的话SQL的编写,只需要将字段的值查出来就行,注意名字自定要和resultMap标签中的名字一一对应就行(顺序乱了没关系),这样mybatis会自己帮我们处理结果,而且到MVC层我们就不需要进行逐一赋值了,直接调用mapper层接口就行,会省去很多的麻烦

@PostMapping
    private Object getData() {

        List<User> users = userAllMapper.selectStu();

        return users;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值