idea__MyBatis框架11——多表查询(一对一、一对多)
一、准备环境
mybatis中的多表查询 表之间的关系有几种:
- 一对多
- 多对一
- 一对一
- 多对多
举例: 用户和订单就是一对多 订单和用户就是多对一 一个用户可以下多个订单 多个订单属于同一个用户
人和身份证号就是一对一 一个人只能有一个身份证号 一个身份证号只能属于一个人 老师和学生之间就是多对多 一个学生可以被多个老师教过 一个老师可以交多个学生 特例: 如果拿出每一个订单,他都只能属于一个用户。 所以Mybatis就把多对一看成了一对一。 mybatis中的多表查询: 示例:用户和账户 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) 步骤: 1、建立两张表:用户表,账户表 让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加 2、建立两个实体类:用户实体类和账户实体类 让用户和账户的实体类能体现出来一对多的关系 3、建立两个配置文件 用户的配置文件 账户的配置文件 4、实现配置: 当我们查询用户时,可以同时得到用户下所包含的账户信息 当我们查询账户时,可以同时得到账户的所属用户信息
我们创建多一张表,并插入三条数据,表的内容如下:
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,48,1000),(2,45,1000),(3,48,2000);
插入完成之后是这个样子的,打开我们的架构设计器,可以看到我们user表的主键id,是account表uid的外键
接着我们创建account表对应的实体类
创建接口
创建IAccountDao.xml文件
在主配置xml文件中配置IAccountDao.xml
创建Account测试类
运行查询所有方法,没有问题,account表的数据出来了
环境测试完成
二、一对一
第一种方式:
我们先来看一条sql语句,我们发现,我们查询出来的有两个id
我们不想让它有两个id,我们给它取个别名,如下:注释已经写的很清楚了,就不解释了,在mysql懂写了,我们就去mybatis了
创建AcoountUser子类继承我们的Acoount父类
接着创建接口
配置IAcoountDao.xml文件
运行测试方法,数据没有问题,出来了
第二种方式:
在我们的Account实体类中,创建一个主表实体的对象
接着在IAccountDao.xml配置,association标签是一对一关联
运行测试方法,没有问题,封装进来了
三、一对多
回到IUserDao接口中,有一个findAll接口
回到我们的User实体类中,添加account集合引用,关联
配置IUserDao.xml文件,如下
运行查询所有测试方法,没有问题,数据出来了
为什么只有两条数据呢?情况如下,写的很清楚了
————————
创作不易,如觉不错,随手点赞,关注,(* ̄︶ ̄),谢谢~~
下一篇:
基于ssm员工管理系统ssm权限系统