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多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)