Mybatis -- Mybatis多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis -- Mybatis多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)相关的知识,希望对你有一定的参考价值。

01:Mybatis – Mybatis注解开发:基本开发
02:Mybatis – MyBatis的注解实现复杂映射开发

说明:

我在mybatis核心配置文件配置了包别名。

    <!--    别名-->
    <typeAliases>
        <package name="com.tian.pojo"/>
    </typeAliases>

我用到的依赖

pom.xml

    <dependencies>
        <!--        mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <!--        mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--        单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <!--        日志打印-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

1. 一对一查询


1.1 一对一查询的模型


1.2 一对一查询的语句

对应的sql语句: select * from orders o,user u where o.uid=u.id;

查询的结果如下:


1.3 创建Order和User实体


1.4 创建OrderMapper接口


1.5 配置OrderMapper.xml

方式一:

手动指定字段与实体属性的映射关系

  • column:数据表的字段名称
  • property:实体的属性名称

方式二:

association关联、匹配。这里匹配user内部的属性。

  • property: 当前实体(order)中的属性名称(private User user)
  • javaType: 当前实体(order)中的属性的类型(User)


1.6 测试结果

2. —对多查询


2.1 一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户。

一对多查询的需求:

查询一个用户,与此同时查询出该用户具有的订单。


2.2 一对多查询的语句

对应的sql语句: select * from orders o,user u where o.uid=u.id;

查询的结果如下:


2.3 修改User实体


2.4 创建UserMapper接口


2.5 配置UserMapper.xml

配置集合collection信息:

  • property:集合名称
  • ofType:当前集合中的数据类型


2.6 测试结果



3. 多对多查询(多对多和一对多类似,只是多了一张中间表)


3.1 多对多查询的模型

用户表和角色表的关系为:一个用户有多个角色,一个角色被多个用户使用。

多对多查询的需求:

查询用户同时查询出该用户的所有角色


3.2 多对多查询的语句

对应的sql语句:

    SELECT *
    FROM USER u,
         user_role ur,
         role r
    WHERE u.id = ur.userId
      AND ur.roleId = r.id

查询的结果如下:


3.3 创建Role实体,修改User实体


3.4 添加UserMapper接口方法


3.5 配置UserMapper.xml


3.6 测试结果




以上是关于Mybatis -- Mybatis多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习——多表查询

mybatis学习——多表查询

Mybatis -- Mybatis多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)

Mybatis多表查询(一对多,多对一,多对多)

mybatis 多表查询 之一对一

Mybatis 的多表操作