mybatis框架之 resultMap 的高级应用

各位小伙伴

今天我们来了解

resultMap 的高级应用

mybatis 查询多表

数据库表结构中存在的几种多表关系:一对一 ,一对多, 多对一 ,多对多

一对一的关系

就比如我们创建一个数据库,有一个用户表,用户表就只会有一个用户名,密码什么的。然后在对应一个用户详情表,之所以要这样做,是因为我们的表的大小是记录数*字段数,要是设计了太多的字段,当数据记录过多的时候,就会减缓查询速度。

多对一的关系

用户表(主表)和部门表(从表)的关系:一个用户只能有一个部门,多个用户属于同一个部门 站在用户表的角度,用户表和部门表的关系是多对一。

需求: 查询用户信息的时候,需要讲用户所属的部门名称查询出来

第一种方式:普通 sql 关联查询,映射用户扩展对象

创建一个返回对象

mybatis框架之 resultMap 的高级应用_第1张图片

用 resultType 标签返回新创建的对象 UserDept,写一下接口。

具体的 SQL 语句。

mybatis框架之 resultMap 的高级应用_第2张图片

测试运行一下。

mybatis框架之 resultMap 的高级应用_第3张图片

第二种方式:用 mybatis 的 resultMap 标签返回

创建一个Dept.Java

mybatis框架之 resultMap 的高级应用_第4张图片

在 user 对象加入部门对象的属性,不要忘记set() get() 方法。

mybatis框架之 resultMap 的高级应用_第5张图片

写一个接口

SQL语句对于多对一关系的从表的映射 

association :用于多对一那个一的映射。

property:User对象里面新加的关联对象的属性名称。

javaType :属性的类型(部门对象)。

mybatis框架之 resultMap 的高级应用_第6张图片

用 resultMap 标签返回查询结果 

mybatis框架之 resultMap 的高级应用_第7张图片

一对多的关系

部门表(主表)和用户(从表)的关系:一个部门有多个用户 站在部门表的角度看 部门表和用户表的关系是一对多的关系

需求:查询某个部门下面的所有用户信息

mybatis框架之 resultMap 的高级应用_第8张图片

第一种方式:普通的 sql 关联查询,映射到部门扩展对象

创建一个返回对象 DeptUser.java

mybatis框架之 resultMap 的高级应用_第9张图片

用 resultType 标签返回新创建的对象 DeptUser,写一个接口。

SQL语句

mybatis框架之 resultMap 的高级应用_第10张图片

测试一下

mybatis框架之 resultMap 的高级应用_第11张图片

第二种方式 :用 mybatis 的 resultMap 标签返回

在部门对象加入用户集合的属性

mybatis框架之 resultMap 的高级应用_第12张图片

用 resultMap 标签返回查询结果,写一个接口。

SQL语句。

对于一对多关系的从表(用户表)的映射

collection :用于一对多那个多的映射

property:Dept 对象里面新加的关联集合对象的属性名称

ofType :属性的类型(用户对象)

mybatis框架之 resultMap 的高级应用_第13张图片

测试一下

mybatis框架之 resultMap 的高级应用_第14张图片

总结:

第一种方式:会随着sql的变化或者业务需求的变化,返回的对象就会发生改变,那我们每次需要重新定义实体对象,但是相对来说比较简单,所以应用广泛。

第二种方式:需要使用 resultMap 标签里面的 association 完成映射,稍微有点复杂,但是如果系统需要延迟加载,必须使用此方式才能完成。

你可能感兴趣的:(mybatis框架之 resultMap 的高级应用)