表之间关系分析:
- 一对多
- 多对一
- 一对一
- 多对多
举例:
- 用户和订单就是一对多(一个用户可以下多个订单)
- 订单和用户就是多对一(多个订单可以属于同一个用户)
- 人和身份证号就是一对一(一个人只能有一个身份证号,一个身份证号只能属于一个人)
- 老师和学生之间就是多对多(一个学生可以被多个老师教过,一个老师可以教多个学生)
特例:
- 如果拿出每一个订单,它都只能属于一个用户。(所以mybatis就把多对一看成了一对一)。
Mybatis中的多表查询:
示例:用户和账户
- 一个用户可以有多个账户
- 一个账户只能属于一个用户(多个账户也可以属于一个用户)
步骤:
- 建立两张表:用户表,账户表(让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加)
- 建立两个实体类:用户实体类,账户实体类(让用户和账户的实体类能体现出一对多的关系)
- 建立两个配置文件:用户的配置文件,账户的配置文件
- 实现配置:当我们查询用户时,可以同时得到用户下所包含的账户信息;当我们查询账户时,可以同时得到账户的所属用户信息
详细步骤:
1.建立两张数据库表,用户表user、账户表account:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`ID` int(11) NOT NULL COMMENT '编号',
`UID` int(11) default NULL COMMENT '用户编号',
`MONEY` double default NULL COMMENT '金额',
PRIMARY KEY (`ID`),
KEY `FK_Reference_8` (`UID`),
CONSTRAINT `FK_Reference_8` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `account`(`ID`,`UID`,`MONEY`) values (1,46,1000),(2,45,1000),(3,46,2000);
2.创建Maven工程(jar),pom.xml引入依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>lo