KKB :mybatis实现多表查询:一对多,多对一,多对多,一对一

Mybatis查询之多表查询:一对多

记得一句话:一方存多方的集合,多方存储一方的属性。

在一对多的例子中,一:年级 ,多:学生

在年级中存储学生的集合,在学生bean中存储年级的属性

编写接口

编写配置文件

首先我们需要在mysql中先编写好查询语句,

先描述自身的信息,然后描述关联表的信息,id标签表述主键列,非主键列使用result标签描述

比如说这里的grade的id是主键,所以使用的是id标签,而gname是普通列,于是用的是result标签

此处的查询时根据grade表查询出student的信息,所以student使用collection标签表示从表中数据,也是遵从 id 和result的区别


Mybatis查询之多表查询:多对一

多方存一方的属性

resultMap使用的是Student

编写mapper配置文件,注意这里的连接表的语句使用的association 和 javaType

测试结果对数据进行拼接

javaType和ofType都是用来指定对象类型的,但是JavaType是用来指定一方中属性的类型,而ofType是用来指定多方属性的类型


Mybatis查询之多表查询:多对多

多表查询的结果不是直接返回一个类型,而是使用resultMap,再指定返回的类型

多对多用到了三张表,role 、 menu 、 middle

role表:角色表,其中包括了id和name

menu表:即权限表,其中包括id和name等等

middle:则包括 roleId和menu的Id

java代码中不需要创建中间表middle的bean对象,只需要创建role和menu的表对象

每一方 都是多方,所以都需存储 对方的集合

             

编写查询方法的接口,注意返回的值是查询的值,不是说你查询结果为菜单,然后返回值是个Menu对象

mapper的查询语句都是使用collection包括多的一方


一对一

一对一的使用场景比较少,比如说生活中的一夫一妻

bean中需要定义对方的属性,然后在mapper中需要注意返回的resultMap中的属性是association

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/113058370