MyBatis Plus中XML复杂映射,一对多,多中一对一

20250217140120406799.png

现实生活中的例子

我们先不看代码,想象一下,你在管理一个学校的信息系统。学校里有老师,每个老师可以教多个班级,这就是典型的一对多关系。而每个班级里又有一个班主任,这就是多中嵌套一对一的关系。在数据库里,这些信息可能存放在不同的表中,而我们要用 Java 代码把它们整合起来。

MyBatis Plus 的resultMap

resultMap就是 MyBatis 里用来建立数据库表和 Java 对象之间关系的工具。下面我们通过一段结合学校场景的具体代码,来看看它是怎么工作的,以及是否存在潜在问题。

代码示例

<resultMap id="teacherSchoolMap" type="com.school.vo.TeacherVO">
    <result column="TEACHER_ID" jdbcType="VARCHAR" property="id"/>
    <result column="TEACHER_NAME" jdbcType="VARCHAR" property="name"/>
    <result column="HIRE_DATE" jdbcType="TIMESTAMP" property="hireDate"/>

    <collection property="teachingClasses" ofType="com.school.vo.ClassVO">
        <id column="CLASS_ID" jdbcType="VARCHAR" property="id" />
        <result column="CLASS_NAME" jdbcType="VARCHAR" property="className" />
        <result column="CREATION_TIME" jdbcType="TIMESTAMP" property="creationTime" />
        <association property="classTeacher" javaType="com.school.vo.TeacherVO" resultMap="classTeacherMap">
        </association>
    </collection>
</resultMap>

<resultMap id="classTeacherMap" type="com.school.vo.TeacherVO">
    <id column="CLASS_TEACHER_ID" jdbcType="VARCHAR" property="id" />
    <result column="CLASS_TEACHER_NAME" jdbcType="VARCHAR" property="name" />
    <result column="CONTACT_NUMBER" jdbcType="VARCHAR" property="contactNumber" />
</resultMap>

一对多关系的映射

在上面的代码里,标签就是用来处理一对多关系的。teacherSchoolMap对应的 Java 对象代表一位老师,而teachingClasses是这位老师所教的多个班级,一个老师可以教多个班级,这就是一对多关系。通过property指定 Java 对象里的集合属性名,ofType指定集合里每个元素的类型,MyBatis 就能把数据库里相关的数据,正确地放进这个集合里。

多中嵌套一对一关系的映射

再看标签,它处理的是一对一关系。在teachingClasses集合里,每个班级又有一个classTeacher(班主任),这就是多中嵌套一对一。property指定 Java 对象里的属性名,javaType指定属性的类型,resultMap引用另一个resultMap(classTeacherMap)来详细映射这个属性的具体内容。

总结

通过resultMap,MyBatis 让我们能轻松处理数据库和 Java 对象之间复杂的关系。无论是一对多,还是多中嵌套一对一,都能安排得明明白白。但在编写resultMap映射代码时,需要注意上述提到的潜在问题,确保代码的准确性和可维护性。这不仅让我们的代码更简洁、易读,还提高了开发效率。下次你在处理数据库和 Java 对象交互的时候,不妨试试用resultMap来构建这些关系 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛尧笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值