Mybatis中的多表查询

本文介绍了MyBatis中不同数据库表间的关系(一对一、一对多、多对一、多对多)并提供了示例。通过创建用户和账户表,展示了如何建立外键实现一对多关系,并完成了实体类、配置文件的建立。同时,给出了查询用户及其账户信息的SQL语句和结果。此外,还展示了如何进行一对一操作和多对多关系的实现,例如用户与角色的关联,涉及用户角色表的建立和查询配置。
摘要由CSDN通过智能技术生成

一、表之间的关系

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);

(2)、建立两个实体类
(3)、建立两个配置文件
(4)、实现配置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值