一、表之间的关系
1、一对多
用户和订单就是一对多
2、多对一
订单和用户就是多对一
3、一对一
如果拿出每一个订单,他都只能属于一个用户。所以Mybatis就把多对一看成了一对一。
人和身份证号就是一对一
4、多对多
用户和角色
二、示例:用户和账户
1、分析:
2、完成表的建立及实现单表查询
代码结构图:
(一)、建立两张表:用户表,账户表
让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
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);
(二)、建立两个实体类:用户实体类和账户实体类
让用户和账户的实体类能体现出来一对多的关系
(三)、建立两个配置文件
(1)用户的配置文件
(2)账户的配置文件
(四)、实现配置
(1)当我们查询用户时,可以同时得到用户下所包含的账户信息
(2)当我们查询账户时,可以同时得到账户的所属用户信息
3、通过写account的子类方式查询
(一)、从两个表中直接找
(1)、语句
(2)、查询结果
(二)、给两个表设别名
(1)、语句
(2)、查询结果
(三)、给一个内容多的表以及两个表重复的内容起别名(正确写法)
(1)、语句
(2)、查询结果
(四)、User的子类
(五)、对应配置信息
4、完成account一对一操作,建立实体类关系的方式
(一)、对配置文件进行修改
IAccountDao.xml
(二)、进行测试的代码
(三)、结果
5、完成user的一对多查询操作
要求:查询所有用户,同时获取到用户下所有账户的信息
(一)、对应Java类
(二)、对应配置
(三)、对应的SQL语句
(四)、对应结果
idea会自动识别重复的部分
6、多对多
(一)、示例:用户和角色
一个用户可以有多个角色
一个角色可以赋予多个用户
(二)步骤:
(1)、建立两张表
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`ID` int(11) NOT NULL COMMENT '编号',
`ROLE_NAME` varchar(30) default NULL COMMENT '角色名称',
`ROLE_DESC` varchar(60) default NULL COMMENT '角色描述',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `role`(`ID`,`ROLE_NAME`,`ROLE_DESC`) values (1,'院长','管理整个学院'),(2,'总裁','管理整个公司'),(3,'校长','管理整个学校');
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`UID` int(11) NOT NULL COMMENT '用户编号',
`RID` int(11) NOT NULL COMMENT '角色编号',
PRIMARY KEY (`UID`,`RID`),
KEY `FK_Reference_10` (`RID`),
CONSTRAINT `FK_Reference_10` FOREIGN KEY (`RID`) REFERENCES `role` (`ID`),
CONSTRAINT `FK_Reference_9` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user_role`(`UID`,`RID`) values (41,1),(45,1),(41,2);