首页 > 其他分享 >mybatis实现多对一和一对多

mybatis实现多对一和一对多

时间:2023-12-23 18:11:39浏览次数:24  
标签:username 实现 private tid mybatis 一对 id SELECT delete

1、多对一实现

概述:多个学生对应一个老师

1.1 按照查询嵌套查询

学生实体类

@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;
    /**用户名称*/
    private String username;
    /**用户类型*/
    private String type;
    /**关联的老师*/
    private Teacher teacher;
    /**逻辑删除*/
    @TableField("is_delete")
    private int flag;
}

老师实体类

@Data
public class Teacher implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;
    /**用户名称*/
    private String username;
    /**逻辑删除*/
    @TableField("is_delete")
    private int flag;
}

学生Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.mapper.UserMapper">
    <!-- 查询全部的学生信息 -->
    <select id="getUserList" resultMap="StudentTeacher">
        SELECT
            `id`,
            `username`,
            `type`,
            `tid`,
            `is_delete`
        FROM
            `user`;
    </select>

    <!-- 多对一结果集映射 -->
    <resultMap id="StudentTeacher" type="User">
        <result column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="type" property="type"/>
        <!-- 复杂属性,对象属性使用:association -->
        <association column="tid" property="teacher" javaType="Teacher" select="getTeacher"/>
    </resultMap>

    <!-- 查询老师信息 -->
    <select id="getTeacher" resultType="Teacher">
        SELECT
            `id`,
            `username`,
            `is_delete`
        FROM
            `teacher`
        WHERE `id`=#{tid};
    </select>
</mapper>

执行结果

1.2 按照结果嵌套查询

学生Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.mapper.UserMapper">
    <!-- 查询全部的学生信息 -->
    <select id="getUserList" resultMap="StudentTeacher">
        SELECT
            u.id AS `sid`,
            u.username,
            u.type,
            u.is_delete AS `sDelete`,
            t.id AS `tid`,
            t.username AS `tecName`,
            t.is_delete AS `tDelete`
        FROM
            `user` AS u,
            `teacher` AS t
        WHERE
            u.tid = t.id;
    </select>
    
    <!-- 多对一结果集映射 -->
    <resultMap id="StudentTeacher" type="User">
        <result column="sid" property="id"/>
        <result column="username" property="username"/>
        <result column="type" property="type"/>
        <result column="sDelete" property="flag"/>
        <!-- 复杂属性,对象属性使用:association -->
        <association property="teacher" javaType="Teacher">
            <result column="tid" property="id"/>
            <result column="tecName" property="username"/>
            <result column="tDelete" property="flag"/>
        </association>
    </resultMap>
   

</mapper>

执行结果

2、一对多实现

概述:一个老师对应多个学生

2.1 按照结果嵌套查询

学生实体类

@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;
    /**用户名称*/
    private String username;
    /**用户类型*/
    private String type;
    /**关联的老师ID*/
    private Long tid;
    /**逻辑删除*/
    @TableField("is_delete")
    private int flag;
}

老师实体类

@Data
public class Teacher implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId
    private Long id;
    /**用户名称*/
    private String username;
    /**一个老师对应多个学生*/
    private List<User> userList;
    /**逻辑删除*/
    @TableField("is_delete")
    private int flag;
}

老师Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.mapper.TeacherMapper">
    <!-- 查询全部老师信息 -->
    <select id="getTeacherList" resultMap="TeacherUser">
        SELECT
            u.id AS `sid`,
            u.username,
            u.type,
            u.is_delete AS `sDelete`,
            t.id AS `tid`,
            t.username AS `tecName`,
            t.is_delete AS `tDelete`
        FROM
            `teacher` AS t,
            `user` AS u
        WHERE
            u.tid = t.id;
    </select>
    <!-- 结果集映射 -->
    <resultMap id="TeacherUser" type="Teacher">
        <result column="tid" property="id"/>
        <result column="tecName" property="username"/>
        <result column="tDelete" property="flag"/>
        <!-- 复杂属性,集合:collection -->
        <collection property="userList" ofType="User">
            <result column="sid" property="id"/>
            <result column="username" property="username"/>
            <result column="type" property="type"/>
            <result column="tid" property="tid"/>
            <result column="sDelete" property="flag"/>
        </collection>
    </resultMap>
</mapper>

执行结果

2.2 按照查询嵌套查询

老师Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hu.mapper.TeacherMapper">
    <!-- 查询全部老师信息 -->
    <select id="getTeacherList" resultMap="TeacherUser">
        SELECT
            t.id,
            t.username,
            t.is_delete
        FROM
            `teacher` AS t;
    </select>
    <!-- 结果集映射 -->
    <resultMap id="TeacherUser" type="Teacher">
        <result column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="is_delete" property="flag"/>
        <!-- 复杂属性,集合:collection -->
        <collection property="userList" javaType="ArrayList" ofType="User" select="getUser" column="id"/>
    </resultMap>
    <!-- 查询学生信息 -->
    <select id="getUser" resultType="User">
        SELECT
            u.id,
            u.username,
            u.type,
            u.tid,
            u.is_delete
        FROM
            `user` AS u
        WHERE
             tid = #{tid};
    </select>
</mapper>

执行结果

标签:username,实现,private,tid,mybatis,一对,id,SELECT,delete
From: https://www.cnblogs.com/huxiaoan1/p/17923245.html

相关文章

  • 实现多账号切换,试试Line多开功能
    实现多账号切换,尝试Line多开功能引言:在当今社交媒体时代,人们经常需要同时管理多个社交账号。例如,一个人可能有多个Line账号,用于工作、个人和其他不同的用途。为了方便用户切换账号,许多应用程序已经开始提供多账号切换功能。本文将介绍如何实现Line的多账号切换功能,让用户能够更......
  • 【Linux】命令实现分卷压缩
    压缩命令#压缩命令:把es-head.tar文件,差分成20m大小的文件,每一部分都以es-head-part-前缀命名split-b20mes-head.tares-head-part-#压缩命令:把testSplit文件夹,压缩拆分成20m大小的文件,每一部分都以testSplit-part-前缀命名tar-czvf-testSplit/|split-b20m-test......
  • WPF+SqlSugar+MVVM实现增删改查
    1、新建一个WPF应用(NETFramework)2、安装SqlSugarNuGet包3、在SqlSugar4.x下载代码生成器https://www.donet5.com/Doc/8/11374、在WPF中新建三个文件夹Models主要放实体类、Views主要放窗体、ViewModels主要是View逻辑的实现5、把生成的实体类放到Models文件夹内,在V......
  • Android实现雷达扫描效果
    手把手教程,先看效果,能用得上的再继续往下看……注:生成的gif图扫描有点慢,下面代码有参数可以控制速度。针对上图效果,以UI方不方便切图,可以有两种实现方式。方式一:UI将整个雷达切图(除中间头像外)针对整个雷达图做rotation动画完整代码:布局文件:activity_main.xml<?xmlversion="1.0"en......
  • mybatis与mybatisplus
    使用这个不会造成冲突 同时不要把<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>删除<dependency><grou......
  • 实验6企业级网络构建与配置实现(师专特供RIP版)
    实验6企业级网络构建与配置实现思路来源是这里不得不说这个哥们写的是相当nice!但是可能由于笔误敲错了一个命令。本文基于这位老哥的实验思路,将OSPF替换成RIP。(因为某师专的机器好像跑不了OSPF)拓扑图设备密码交换机密码默认登录名:admin默认密码:[email protected]进入......
  • 基于SpringBoot+Vue的文理医院预约挂号系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 二叉树的查找算法的实现与运用
    二叉树的查找算法的实现与运用这里我们需要运用到之前二叉树建立的知识点每一次调用Insert函数时,都会开辟一个BiNode类型的空间,同时递归调用。其次,我们在建立平衡二叉树时,当前节点的左结点小于该结点,当前节点的右结点大于该结点,所以,我们在递归之前添加了一个判断条件。最后,Inser......
  • C练习——计算字符串长度,实现strlen功能
    strlen是一个库函数,是专门求字符串长度的,只能针对字符串,从参数给定地址向后一直找“\0”,统计“\0”之前出现的字符的个数。现给字符串“abcd”,要求写一个计算此字符串长度的函数 #include<stdio.h>intmy_strlen(chararr[]);//函数声明intmain(){chararr[]=......
  • 短视频app源码,实现幂等设计的重要方式
    短视频app源码,实现幂等设计的重要方式一、取消重试取消重试有两种方法,第一是设置重试次数为零,第二是选择不重试的集群容错策略。<!--设置重试次数为零--><dubbo:referenceid="helloService"interface="com.java.front.dubbo.demo.provider.HelloService"retries="......