MyBatis一对多,多对一的用法

为什么要用一对多,多对一?

一、
数据库表之间的关联关系:在关系型数据库中,不同表之间存在一对多、一对一、多对多等关联关系。通过在MyBatis中配置关联关系,可以方便地处理这些表之间的连接和查询操作,使数据的读取和写入更加简单和高效。

二、

避免手动编写复杂SQL:使用MyBatis的关联关系配置,可以避免手动编写复杂的SQL语句来处理多个表之间的关联。通过简单的配置,MyBatis可以自动处理表之间的连接查询,简化了开发者的工作量。

三、

对象关系映射:MyBatis是一个对象关系映射(ORM)框架,它可以将数据库中的表与Java对象之间进行映射。配置关联关系可以帮助开发者实现对象之间的关联,提供了更加面向对象的编程方式。

四、

冗余数据减少:通过合理的关联关系配置,可以避免数据的冗余存储,减少数据库的存储空间占用。同时,在查询数据时,也可以通过关联关系一次性获取到所有相关的数据,提高查询效率。

总的来说,MyBatis的关联关系配置可以帮助开发者处理多表之间的关系,提供了更方便、高效和可维护的数据操作方式,减少了手动编写复杂SQL语句的工作量,同时也符合对象关系映射的思想。

MyBatis一对多的用法

在创建实体类的时候关联两个实体类

一、学生表的实体类

public class Tab_student {
    private Integer stuno;
    private String stuname;
    private String stusex;
    private Integer classid;
    /*
    tab_Class 是tab_student的一个属性
    类型是Tab_class是一个类型
     */
    private Tabc_lass lass;
}

二、班级表的实体类

public class Tabc_class {
    private Integer id;
    private String cname;
    /**
     * 配置班级和学生的关系
     *一对多
     * 一个班级很多学生
     */
    private List<Tab_student> stuList;
}

mapper里的写法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.dao.AppDao">
<!--                                                                 自动映射-->
    <resultMap id="getStu" type="org.example.entity.Tab_student" autoMapping="true">
<!--        列名和属性名     一一对应-->
<!--        注意 主键stuno    标签id代表的是主键-->
<!--        column 代表的是列的名字-->
<!--        property实体类中的属性-->
        <id column="stuno" property="stuno"></id>
<!--        普通的字段  用result-->
        <result column="stuname" property="stuname"></result>
        <result column="stusex" property="stusex"></result>
        <result column="classid" property="classid"></result>
<!--        多对一  标签 properyty代表在乙方属性的名字-->
<!--        javatype代表属性的类型是什么-->
        <association property="lass" javaType="org.example.entity.Tabc_lass">
<!--            配置-->
            <id property="id" column="id"></id>
            <result property="cname" column="cname"></result>
        </association>
    </resultMap>
    <select id="findAll" resultMap="getStu" resultType="org.example.entity.Tab_student">
        select * from tab_student s
        left join tab_class c
        on s.classid=c.id
    </select>
</mapper>

运行之后的结果

[Tab_student(stuno=1, stuname=张三, stusex=男, classid=1, lass=Tabc_lass(id=1, cname=A369, stuList=null)), Tab_student(stuno=2, stuname=李四, stusex=女, classid=2, lass=Tabc_lass(id=2, cname=A370, stuList=null)), Tab_student(stuno=4, stuname=赵六, stusex=男, classid=2, lass=Tabc_lass(id=2, cname=A370, stuList=null)), Tab_student(stuno=3, stuname=王五, stusex=男, classid=3, lass=Tabc_lass(id=3, cname=A371, stuList=null))]

MyBatis多对一的用法

实体类上的写法与上面一样

mapper写法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.dao.ClassMapper">
    <resultMap id="getAllClass" type="org.example.entity.Tabc_lass" autoMapping="true">
        <id column="id" property="id"></id>
<!--        多   property  代表的就是tab——Lass中学生的属性-->
        <collection property="stuList" ofType="org.example.entity.Tab_student" autoMapping="true">
            <id property="stuno" column="stuno"></id>
        </collection>
    </resultMap>
    <select id="findall" resultMap="getAllClass" resultType="org.example.entity.Tabc_lass">
        select * from tab_class c
        left join tab_student s
        on s.classid=c.id
    </select>
</mapper>

运行之后的结果

[Tabc_lass(id=1, cname=A369, stuList=[Tab_student(stuno=1, stuname=张三, stusex=男, classid=1, lass=null)]), Tabc_lass(id=2, cname=A370, stuList=[Tab_student(stuno=2, stuname=李四, stusex=女, classid=2, lass=null), Tab_student(stuno=4, stuname=赵六, stusex=男, classid=2, lass=null)]), Tabc_lass(id=3, cname=A371, stuList=[Tab_student(stuno=3, stuname=王五, stusex=男, classid=3, lass=null)])]

以上就是MyBatis一对多,多对一的用法

总体来说就是对象关系的映射

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值