快捷搜索: 王者荣耀 脱发

MyBatis实现多表查询(一对一、一对多)的方式

MyBtis的多表查询方式有两种:sqlMapper配置文件和注解

具体代码实现如下:

首先我们以两张数据库表学生和班级为例,一个学生只对应一个班级(一对一),一个班级对应多个学生(一对多)。表如下:

学生表:

班级表:

方式一:sqlMapper配置文件

一对一:在resultMap标签中使用 association 标签

sqlMappe.xml实现一对一:

注意:单表查询只需用<result>标签写映射不上的内容,但多表联查必须把需要的映射关系都写上

代码实现结果:

标注:绿色框内是学生信息,右边框内是每个学生对应的班级信息。

一对多:在resultMap标签中使用collection 标签

sqlMappe.xml实现一对多:

注意:ofType属性写的是集合对应的类型,不能写List。

代码实现结果:

注释:* 级联操作会降低性能,增加程序执行时间,多层关联式建议不超过三层。

方式二:注解

一对一:在@Results 注解中的@Result注解中使用@One注解

一对一注解代码:

注意: 班级Mapper中findById的参数来自学生Mapper的@Result对应外部属性名映射的column属性,One的路径一只写到xx.xx.x.方法名

代码结果实现:

注意:虽然只是一对一的查询,但是对于数据库是多次访问的,如下图

一对多:在@Results 注解中的@Result 注解中使用@Many注解

一对多注解代码:

班级Mapper的注解↓

StudentMapper对应方法↓

注释:一对多和一对一的区别在@many注解,其他基本都是一样的

代码结果实现:

以上就是关于MyBatis实现多表查询(一对一、一对多)的两种方式图示

经验分享 程序员 微信小程序 职场和发展