首页 > 其他分享 >mybatis处理一对多的映射关系

mybatis处理一对多的映射关系

时间:2023-03-02 22:55:48浏览次数:53  
标签:deptId 映射 Dept dept emps mybatis 一对 deptName public

实体类

package org.example.entity;
import java.util.List;

public class Dept {
    private Integer deptId;
    private String deptName;
    private List<Emp> emps;

    public Dept() {
    }
    public Dept(Integer deptId, String deptName) {
        this.deptId = deptId;
        this.deptName = deptName;
    }

    public Integer getDeptId() {
        return deptId;
    }

    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public List<Emp> getEmps() {
        return emps;
    }

    public void setEmps(List<Emp> emps) {
        this.emps = emps;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptId=" + deptId +
                ", deptName='" + deptName + '\'' +
                ", emps=" + emps +
                '}';
    }
}

 

mapper接口

 Dept getEmpAndDeptByDeptId(@Param("deptId") int deptId);

 

方式一:

collection 标签

<?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="org.example.mapper.DeptMapper"><resultMap id="empAndDeptResultMap" type="Dept">
        <id column="dept_id" property="deptId"></id>
        <result column="dept_name" property="deptName"></result>

        <!--
            collection:处理一对多的映射关系(处理集合类型的属性)
            ofType:设置集合类型的属性中存储的数据的类型
        -->
        <collection property="emps" ofType="Emp">
            <id column="emp_id" property="empId"></id>
            <result column="emp_name" property="empName"></result>
            <result column="age" property="age"></result>
            <result column="gender" property="gender"></result>
        </collection>
    </resultMap>

    <select id="getEmpAndDeptByDeptId" resultMap="empAndDeptResultMap">
        select * from t_dept a left join t_emp b on a.dept_id = b.dept_id where a.dept_id = #{deptId}
    </select>

</mapper>

 

方式二:

分布查询

DeptMapper接口

Dept getDeptAndEmpStepOne(@Param("deptId") int deptId);

EmpMapper接口

List<Emp> getDeptAndEmpStepTwo(@Param("deptId") Integer deptId);

DeptMapper.xml

<resultMap id="DeptAndEmpResultMapStepOne" type="Dept">
        <id column="dept_id" property="deptId"></id>
        <result column="dept_name" property="deptName"></result>

        <collection property="emps"
                    select="org.example.mapper.EmpMapper.getDeptAndEmpStepTwo"
                    column="dept_id">
        </collection>
    </resultMap>

    <select id="getDeptAndEmpStepOne" resultMap="DeptAndEmpResultMapStepOne">
        select * from t_dept where dept_id = #{deptId}
    </select>

EmpMapper.xml

 <select id="getDeptAndEmpStepTwo" resultType="org.example.entity.Emp">
        select  * from t_emp where dept_id = #{deptId}
 </select>

 

测试代码

@Test
    public void testGetDeptAndEmpByStep(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmpStepOne(1);
        System.out.println(dept);
        sqlSession.close();
    }

结果:

Dept{deptId=1, deptName='A', emps=[Emp{empId=1, empName='张三', age=10, gender='男', dept=null}, Emp{empId=4, empName='赵六', age=15, gender='男', dept=null}]}

 

标签:deptId,映射,Dept,dept,emps,mybatis,一对,deptName,public
From: https://www.cnblogs.com/ixtao/p/17173914.html

相关文章

  • MyBatis_09(逆向工程)
    MyBatis的逆向工程正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成......
  • mybatis懒加载
    mybatis懒加载全局配置<settings><settingname="mapUnderscoreToCamelCase"value="true"/><!--开启懒加载(开启延迟加载)--><settingn......
  • Mybatis学习_03_配置学习
    Mybatis学习_03MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。1、环境配置(environments)MyBatis可以配置成适应多种环境,这种机制有助于将SQL映......
  • 【Mybatis】【事务管理器】【一】Mybatis源码解析-事务管理器
    1 前言在了解数据源后,我们来看下事务管理器,这个东西也很重要。2  事务管理器类型在MyBatis中有两种类型的事务管理器(也就是type="[JDBC|MANAGED]"):JDBC–这个......
  • mybatis 实现 if..else
    mybatis中可以通过使用下列标签,配合if标签实现java中if...else...的效果,减少查库的次数<choose><when></when><otherwise></otherwise></choose>下面是实例展......
  • Java应用【Ⅺ】在 Java 中使用MyBatis框架进行关系型数据库操作
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!相关阅读:​​Java应用【......
  • SpringBoot+MybatisPlus+MySql 自动生成代码 自动分页
    SpringBoot+MybatisPlus+MySql自动生成代码自动分页一、配置<!--Mybatisplus--><dependency><groupId>com.baomidou</groupId>......
  • Mybatis-Plus学习
    mybatis-plus学习系统环境jdk8+mysql5.7+springBoot+mybatis最新版本+系统编码UTF-8文件配置application.properties#应用名称spring.application.name=mybatisplu......
  • MyBatis基础
    概念      快速入门创建user表,添加数据CREATEDATABASEmybatis;USEmybatis;DROPTABLEIFEXISTStb_user;CREATETABLEtb_user(idINTPRIM......
  • 九、MybatisPlus的多数据源
    场景适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等目前我们就来模拟一个纯粹多库的一个场景,其他场景类似场景说明:我们创建两个库,分别为:mybatis_plus(以前......