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实现多表查询(一对一、一对多)的两种方式图示