前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis连表查询之association与collection

Mybatis连表查询之association与collection

作者头像
九转成圣
发布2024-04-10 17:10:20
740
发布2024-04-10 17:10:20
举报
文章被收录于专栏:csdncsdn

Mybatis连表查询之association与collection

association

实体类

不用再在EmpDept中将Dept的所有属性都挨个写一遍,只需要引用Dept这个对象即可

代码语言:javascript
复制
@Setter
@Getter
public class EmpDept extends Emp {
    private Dept dept;

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}

Mapper

代码语言:javascript
复制
<resultMap id="EmpDeptResultMap" type="com.example.hello.entity.EmpDept" extends="com.example.hello.dao.EmpMapper.BaseResultMap">
    <association property="dept" resultMap="com.example.hello.dao.DeptMapper.BaseResultMap"></association>
</resultMap>

<select id="selectEmpDept" resultMap="EmpDeptResultMap">
    SELECT * from emp e left join dept d on d.deptno = e.deptno
</select>

xml说明

  1. resultMap标签的extends属性可以通过继承父结果映射来复用已定义的映射规则(不在同一个命名空间下需要指定命名空间,复用代码生成器生成的结果集映射,表字段变动之后,不再需要修改此处,一处定义处处使用,你品…如果此处再写一遍,一方面是麻烦,更让人郁闷的是,如果表字段修改了,此处需要手动维护,想想就头大)。

association的resultMap应用的BaseResultMap不在当前空间下,所以要加上命名空间

测试

代码语言:javascript
复制
@SpringBootTest
class EmpDeptMapperTest {

    @Autowired
    EmpDeptMapper empDeptMapper;

    @Test
    void selectEmpDept() {
        List<EmpDept> empDepts = empDeptMapper.selectEmpDept();
        for (EmpDept empDept : empDepts) {
            System.out.println(empDept);
        }
    }
}
代码语言:javascript
复制
{"comm":20000.0,"createTime":1659164366000,"dept":{"deptno":1,"dname":"开发部","loc":"北京"},"deptno":1,"empno":6,"ename":"彭和尚","hiredate":351446400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4}
{"comm":10000.0,"createTime":1659164366000,"dept":{"deptno":1,"dname":"开发部","loc":"北京"},"deptno":1,"empno":7,"ename":"张中","hiredate":351619200000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4}
{"comm":15000.0,"createTime":1659164366000,"dept":{"deptno":1,"dname":"开发部","loc":"北京"},"deptno":1,"empno":8,"ename":"说不得","hiredate":370454400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4,"sal":1.0}
{"comm":10000.0,"createTime":1659164366000,"dept":{"deptno":1,"dname":"开发部","loc":"北京"},"deptno":1,"empno":9,"ename":"冷谦","hiredate":368726400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4}
{"comm":30000.0,"createTime":1659164366000,"dept":{"deptno":1,"dname":"开发部","loc":"北京"},"deptno":1,"empno":10,"ename":"周巅","hiredate":376156800000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4}
{"createTime":1659164366000,"dept":{"deptno":2,"dname":"测试部","loc":"上海"},"deptno":2,"empno":11,"ename":"殷野王","hiredate":545760000000,"job":"教主舅舅","lDelete":0,"lVersion":1,"mgr":3}
{"createTime":1659164366000,"dept":{"deptno":2,"dname":"测试部","loc":"上海"},"deptno":2,"empno":12,"ename":"殷素素","hiredate":376156800000,"job":"教主妈妈","lDelete":0,"lVersion":1,"mgr":3}
{"createTime":1659164366000,"dept":{"deptno":2,"dname":"测试部","loc":"上海"},"deptno":2,"empno":13,"ename":"小昭","hiredate":380563200000,"job":"神秘丫头","lDelete":0,"lVersion":1,"mgr":2}
{"createTime":1659164366000,"dept":{"deptno":3,"dname":"市场部","loc":"广州"},"deptno":3,"empno":2,"ename":"紫衫龙王","hiredate":360864000000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1}
{"createTime":1659164366000,"dept":{"deptno":3,"dname":"市场部","loc":"广州"},"deptno":3,"empno":3,"ename":"白眉鹰王","hiredate":354988800000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1}
{"createTime":1659164366000,"dept":{"deptno":3,"dname":"市场部","loc":"广州"},"deptno":3,"empno":4,"ename":"金毛狮王","hiredate":357494400000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1}
{"createTime":1659164366000,"dept":{"deptno":3,"dname":"市场部","loc":"广州"},"deptno":3,"empno":5,"ename":"青翼蝙王","hiredate":345830400000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1}
{"comm":200.0,"createTime":1659164366000,"dept":{"deptno":4,"dname":"运营部","loc":"杭州"},"deptno":4,"empno":1,"ename":"张无忌","hiredate":374774400000,"job":"教主","lDelete":0,"lVersion":2,"updateTime":1659194462000}

单条数据格式

代码语言:javascript
复制
{
    "comm": 200,
    "createTime": 1659164366000,
    "deptno": 4,
    "empno": 1,
    "ename": "张无忌",
    "hiredate": 374774400000,
    "job": "教主",
    "lDelete": 0,
    "lVersion": 2,
    "updateTime": 1659194462000,
    "dept": {
        "deptno": 4,
        "dname": "运营部",
        "loc": "杭州"
    }
}

collection

实体类

代码语言:javascript
复制
@Setter
@Getter
public class DeptEmp extends Dept {
    private List<Emp> emps;

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}

Mapper

代码语言:javascript
复制
<resultMap id="DeptEmpResultMap" type="com.example.hello.entity.DeptEmp" extends="com.example.hello.dao.DeptMapper.BaseResultMap">
    <collection property="emps" ofType="Emp" resultMap="com.example.hello.dao.EmpMapper.BaseResultMap"></collection>
</resultMap>

注意:

  1. resultMap标签的type只写DeptEmp会报错,collection的ofType只写Emp是可以的(猜测指定了DeptEmp,应该可以根据属性推断出来),不写也不会报错

测试

代码语言:javascript
复制
@SpringBootTest
class EmpDeptMapperTest {

    @Autowired
    EmpDeptMapper empDeptMapper;

    @Test
    void selectDeptEmp() {
        List<DeptEmp> deptEmps = empDeptMapper.selectDeptEmp();
        for (DeptEmp deptEmp : deptEmps) {
            System.out.println(deptEmp);
        }
    }
}
代码语言:javascript
复制
{"deptno":4,"dname":"运营部","emps":[{"comm":200.0,"createTime":1659164366000,"deptno":4,"empno":1,"ename":"张无忌","hiredate":374774400000,"job":"教主","lDelete":0,"lVersion":2,"updateTime":1659194462000}],"loc":"杭州"}
{"deptno":3,"dname":"市场部","emps":[{"createTime":1659164366000,"deptno":3,"empno":2,"ename":"紫衫龙王","hiredate":360864000000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1},{"createTime":1659164366000,"deptno":3,"empno":3,"ename":"白眉鹰王","hiredate":354988800000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1},{"createTime":1659164366000,"deptno":3,"empno":4,"ename":"金毛狮王","hiredate":357494400000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1},{"createTime":1659164366000,"deptno":3,"empno":5,"ename":"青翼蝙王","hiredate":345830400000,"job":"护教法王","lDelete":0,"lVersion":1,"mgr":1}],"loc":"广州"}
{"deptno":1,"dname":"开发部","emps":[{"comm":20000.0,"createTime":1659164366000,"deptno":1,"empno":6,"ename":"彭和尚","hiredate":351446400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4},{"comm":10000.0,"createTime":1659164366000,"deptno":1,"empno":7,"ename":"张中","hiredate":351619200000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4},{"comm":15000.0,"createTime":1659164366000,"deptno":1,"empno":8,"ename":"说不得","hiredate":370454400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4,"sal":1.0},{"comm":10000.0,"createTime":1659164366000,"deptno":1,"empno":9,"ename":"冷谦","hiredate":368726400000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4},{"comm":30000.0,"createTime":1659164366000,"deptno":1,"empno":10,"ename":"周巅","hiredate":376156800000,"job":"五散人","lDelete":0,"lVersion":1,"mgr":4}],"loc":"北京"}
{"deptno":2,"dname":"测试部","emps":[{"createTime":1659164366000,"deptno":2,"empno":11,"ename":"殷野王","hiredate":545760000000,"job":"教主舅舅","lDelete":0,"lVersion":1,"mgr":3},{"createTime":1659164366000,"deptno":2,"empno":12,"ename":"殷素素","hiredate":376156800000,"job":"教主妈妈","lDelete":0,"lVersion":1,"mgr":3},{"createTime":1659164366000,"deptno":2,"empno":13,"ename":"小昭","hiredate":380563200000,"job":"神秘丫头","lDelete":0,"lVersion":1,"mgr":2}],"loc":"上海"}

单条数据格式

代码语言:javascript
复制
{
    "deptno": 4,
    "dname": "运营部",
    "loc": "杭州",
    "emps": [
        {
            "comm": 200,
            "createTime": 1659164366000,
            "deptno": 4,
            "empno": 1,
            "ename": "张无忌",
            "hiredate": 374774400000,
            "job": "教主",
            "lDelete": 0,
            "lVersion": 2,
            "updateTime": 1659194462000
        }
    ]
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis连表查询之association与collection
  • association
    • 实体类
      • Mapper
        • 测试
        • collection
          • 实体类
            • Mapper
              • 测试
              相关产品与服务
              腾讯云服务器利旧
              云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档