title: mybatis多表查询
date: 2019-12-17 15:52:02
tags: mybatis
categories: mybatis
src: https://shenblog.top/
Mybatis多表查询
一对一查询
-
环境准备
- 一张user表,一张account表
- 一个账户对应一个用户,为一对一的关系
- 用户的id和账户里的用户id为一一对应
-
//用户实体类 private Integer id;//自增长主键id private int uid;//用户唯一id private String username;//用户名 private Date birthday;//生日 private String sex;//性别 private String address;//地址 //省略setter和getter方法
-
//账户实体类 private int id;//自增长主键id private int uid;//用户id private double money;//账户余额 //省略setter和getter方法
方式一
-
新建AccountUser类,继承account类。
-
private String username;//用户名 private String address;//地址 //省略setter和getter方法
-
目录结构如下
-
-
sql文件
-
将结果封装进AccountUser。
-
结果如下
方式二
- 在account中加一个User的属性
- 用resultMap来处理.
- 修改查询方法findAll。接收返回的实体类为Account,不再是AccountUser
- 修改IAccountDao.xml修改如下
- resultMap中的id,定义了一个名称,返回时调用
- type:没有重写别名,只能使用全限定类名
- 中property:必须对应实体类的集合名
- javaType:使用全限定类名。
一对多查询
-
分析:一个用户可能会由多个账户。构成了一对多的关系
-
有些账户可能没有对应的账户,但所有的用户都必须查询出来,所以使用左外连接比较好
-
在主表User中加入从表Account
-
-
修改IuserDao.xml文件
-
-
测试
-
多对多查询
- 新建role角色表
- 一个用户可能有多个角色,一个角色可能由多人扮演,构成了多对多的关系!
- 多对多的关系表,可以拆分成两次一对多的关系,构建一个中间表,中间表的主键由两张多对多关系表的主键对应起来,外键设为两张表的主键
- 演示一下由角色对应用户的多对多
- 新建用户实体类
- 加入从表user类。
- 新建Iroledao.xml
- 修改sqlMapconfig.xml的映射位置
- 测试类