MyBatis如何实现多表联查

2年前 (2022) 程序员胖胖胖虎阿
185 0 0

目录

一、什么是级联

二、实现多表联查的方式

         方式一:通过xml配置文件

        1.一对一级联步骤

         2.一对多联步骤

        方式二:使用映射器注解方式

        1.一对一映射

        2.一对多映射

 三、级联的缺陷


一、什么是级联

        级联(cascade),是指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率

  • 一对一:一个对象对应唯一的对象
  • 一对多:一个对象对应多个对象
  • 多对多:多个对象对应多个对象

二、实现多表联查的方式

 方式一:通过xml配置文件

         举例:学生和班级的关系,很明显一个学生对应一个班级,是一对一的关系

        1.一对一级联步骤:

              1.1 创建关联POJO:一对一级联时,以对象方式存储关联关系

              1.2 创建对应的映射器

              1.3 利用<association>元素完成一对一级联

  • 在Student类中包含一个Banji对象

MyBatis如何实现多表联查

MyBatis如何实现多表联查

  • property映射到列结果的字段或属性。如果JavaBean 有这个名字的属性(property),会先使用该属性
  • column数据库中的列名,或者是列的别名

             1.4 编写测试类验证级联关系,测试结果如下:

MyBatis如何实现多表联查


           举例:班级和学生的关系,一个班级会有很多学生,是一对多的关系

         2.一对多级联步骤:

              2.1 创建"一"方POJO以集合的形式级联"多"方对象

              2.2 创建“多”方的POJO对象

              2.3 创建对应的映射器

              2.4 利用collection元素实现一对多级联

MyBatis如何实现多表联查

MyBatis如何实现多表联查

             2.5 编写测试文件测试一对多级联,测试结果如下:

MyBatis如何实现多表联查* 需要注意的是在多表联查中没有显示映射的字段不会被赋值,所以为null

 

方式二:使用映射器注解方式

 还是上面两个表的例子,只是方式变了

        1.一对一映射:

                语法:@One(Select = 一对一查询方法,fetchType = FetchType.EAGER)

                说明:FetchType.lazy是延时加载FetchType.EAGER是即时加载

一对一使用one属性,@one注解

MyBatis如何实现多表联查


        2.一对多映射:

                语法: @Many(select =一对多查询方法,fetchType = FetchType.EAGER)

                说明:FetchType.lazy是延时加载FetchType.EAGER是即时加载

一对多使用many属性,@many注解

MyBatis如何实现多表联查

 三、级联的缺陷:

  1. 性能缺陷级联操作会降低性能,增加程序的执行时间;
  2. 复杂度缺陷关联较多造成复杂度的增加,不利于他人理解和维护;

   在使用上建议:根据实际情况增加级联关系;多层关联,超过三层关联时建议尽量少用级联;

版权声明:程序员胖胖胖虎阿 发表于 2022年10月12日 下午6:00。
转载请注明:MyBatis如何实现多表联查 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...