MyBatis association分步查询

2023-10-23 23:18

本文主要是介绍MyBatis association分步查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Employee类

public class Employee {private Integer id;private String lastName;private String email;private String gender;private Department dept;// 省略setter、getter、toString方法
}

Department类

public class Department {private Integer id;private String departmentName;private List<Employee> emps;
}

再来看EmployeeMapper.xml中的相关语句

select * from tbl_employee where id=#{id}

DepartmentMapper.xml中的相关语句

<!--public Department getDeptById(Integer id);  --><select id="getDeptById" resultType="com.mybatis.bean.Department">select id,dept_name departmentName from tbl_dept where id=#{id}</select>

通过association实现了分步查询,在一定程度上简化了sql语句,另外association还指支持延迟加载(懒加载),目前的情况是当我们执行了getEmpByIdStep语句,也一定执行DepartmentMapper.xml中的getDeptById语句,但如果并不需要部门表中的信息呢?

如:

Employee employee = mapper.getEmpByIdStep(3);System.out.println(employee);

查询id为3的员工的信息,此时我们并不需要部门表的信息,那可以用懒加载的方式进行。

需要在mybatis全局配置文件mybatis-config.xml中开启

  <settings><!-- <setting name="mapUnderscoreToCamelCase" value="true"/> --><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/></settings>

对于这两个属性,我们来看一下mybatis官方文档中的介绍

lazyLoadingEnabled:

当值为true时,所有关联对象都会延迟加载,特定关联关系中通过设置fetchType属性来覆盖该项的开关状态

aggressiveLazyLoading:

当开启时,任何方法的调用都会加载该对象的所有属性。否则每个属性会按需加载

当这样设置后,当我们再次运行

  Employee employee = mapper.getEmpByIdStep(3);System.out.println(employee);

通过控制台的打印sql语句可以发现,并未执行查询部门的sql语句

Employee employee = mapper.getEmpByIdStep(3);
System.out.println(employee.getDept());

当这样调用时,就会调用查询部门的语句,实现了按需加载。

这篇关于MyBatis association分步查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271091

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN