1.1 数据库表关系介绍
关系型数据库表关系分为
* 一对一关联关系
人和身份证的关系。一个人只能有一张身份证,一张身份证只能属于一个人。双向【一对一】关联关系。
* 一对多关联关系
一个用户可以有多个订单,从用户到订单是【一对多】关联关系。
一个订单只能属于一个人,从订单到人是【一对一】的关联关系。
【注意:】一个订单只从属于一个用户,所以mybatis将多对一看成了一对一
* 多对多关联关系
举一个例子:业务系统中,用户和角色的关系。
一个用户可以有多种角色:小明有可能是:经理,员工,总经理
一种角色可以有多个用户:经理这个角色,有多个人:kobe , Curry。际项目中,多对多关系通过中间表,看成两个一对多关联关系。
1.2 SQL数据表结构
-- drop table if exists use;
-- 创建用户基本表
create table user(
id int primary key auto_increment, -- 主键自增长
username varchar(20) not null,
birthday date,
sex char(1) default '男',
address varchar(50)
)engine=innodb auto_increment=4 default charset=utf8;
insert into user3 values (null, '侯大利','1990-10-24','男','江州');
insert into user3 values (null, '王大青','1992-11-12','女','秦阳');
insert into user3 values (null, '朱琳','1983-05-20','男','江州');
insert into user3 values (null, '田大甜','1993-03-22','女','阳州');
-- 查询数据
select * from user;
-- 创建订单表
create table orders (
id INT PRIMARY KEY auto_increment, -- 主键自增长
ordertime varchar(100) , -- 订单时间
total double, -- 订单总额
oid int -- 外键
) engine=innodb auto_increment=4 default charset=utf8;
-- 添加外键约束
alter TABLE orders ADD constraint fk_ep_id FOREIGN KEY(oid) REFERENCES user(id);
-- 插入数据
insert into `orders` values ('1', '2020-2-12', '3000', '1');
insert into `orders` values ('2', '2020-12-1', '5000', '2');
insert into `orders` values ('3', '2020-5-12', '5600', '3');
insert into `orders` values ('4', '2020-4-1', '5600', '4');
insert into `orders` values ('5', '2020-8-11', '5600', '5');
insert into `orders` values ('6', '2020-1-29', '5600', '6');
1.3 一对一关联(多对一)
一对一查询模型
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户。
一对一查询的需求:查询所有订单,与此同时查询出每个订单所属的用户(从订单的角度出发,一个订单只能有一个用户)。
一对一查询语句
-- 查询数据
select * from orders o left join user u on o.oid =u.id
1.3.1项目目录
9.3.2 代码示例
User用户类
package cn.guardwhy.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/*
* 用户类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
Orders订单类
package cn.guardwhy.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/*
*订单表
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Orders {
private Integer id; // 订单id
private String ordertime; // 订单时间
private double money; // 总额
// 表示当前订单属于哪个用户
private User user;
}
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--在内部配置属性 -->
<properties resource="db.properties">
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="root"/>
</properties>
<!--标准的日志工厂实现-->
<settings>
<setting name=