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-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you