Mybatis多表查询
这里我们简单使用一个例子来讲解:用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户.
实际开发过程中, 要显示的数据通常都不是只来自于 一张表.会有多张表的数据, 那么这个时候我们就需要思考
查询过程中我们需要思考的问题是
1. 如何把多张表的数据展示查询数据?
2. 查询出来的数据我们怎么样封装?
实际开发中 业务模型 无非就是如下三种情况:
一对一: 一对一建表 可以将 任何一张表的主键在另外一张表中当作外键.
一对多: 会在多的一方添加一方的主键作为外键约束
多对多: 需要引入第三张 中间表, 中间表 会将两张表的主键拿过来当作外键约束.
要实现这个小测试,这里我们要做的第一步就是数据库的设计与搭建
创建数据库,创建我们需要的测试表格,并为其添加数据
-- 创建数据库
CREATE DATABASE DemoMybatis;
USE DemoMybatis;
-- 第一张表格
CREATE TABLE tab_users(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(30),
PASSWORD VARCHAR(30)
);
INSERT INTO tab_users VALUES(NULL,'蔡广坤','123');
INSERT INTO tab_users VALUES(NULL,'面筋哥','456');
INSERT INTO tab_users VALUES(NULL,'波澜哥','789');
-- 第二张表格
CREATE TABLE tab_orders(
oid INT PRIMARY KEY AUTO_INCREMENT,
ordertime DATETIME,
total DOUBLE,
uid INT,
FOREIGN KEY(uid) REFERENCES tab_users(id)
);
INSERT INTO tab_orders VALUES(NULL,NULL,99,1);
INSERT INTO tab_orders VALUES(NULL,NULL,288,2);
INSERT INTO tab_orders VALUES(NULL,NULL,23,1);
-- 第三张表格
CREATE TABLE tab_role(
id INT PRIMARY KEY AUTO_INCREMENT,
roleName VARCHAR(20),
roleDesc VARCHAR(40)
);
INSERT INTO tab_role VALUES(NULL,'架构师','负责项目的环境设计搭建');
INSERT INTO tab_role VALUES(NULL,'前端工程师','负责前端开发工作');
INSERT INTO tab_role VALUES(NULL,'后端工程师','负责后端开发工作');
-- 第四张表格
CREATE TABLE tab_user_role(
userId INT,
FOREIGN KEY(userId) REFERENCES tab_users(id),
roleId INT,
FOREIGN KEY(roleId) REFERENCES tab_role(id)
);
INSERT INTO tab_user_role VALUES(1,1);
INSERT INTO tab_user_role VALUES(1,2);
INSERT INTO tab_user_role VALUES(2,3);
第二步就是导入项目需要条件的maven坐标(在pom.xml中添加坐标)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mybaits_1122</groupId>
<artifactId>mybaits_1122</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--Mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--注解测试-->
<dependency