mybatis:延迟加载时不要在get/set方法上面添加final关键字(原创)
1.mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
</configuration>
以上延迟加载配置是有效的。
#全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。
mybatis.configuration.lazy-loading-enabled=true
#当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。
mybatis.configuration.aggressive-lazy-loading=false
这是我在springboot中的配置,发现没有作用,请用文件方式的配置。
2.Mapper文件配置
<mapper namespace="com.test.dao.base.DaoBaseUser">
<resultMap id="BaseResultMap"
type="com.test.entity.base.EntityBaseUser">
<id column="userID" jdbcType="VARCHAR" property="userID" />
<result column="orgID" jdbcType="VARCHAR" property="orgID" />
<result column="postID" jdbcType="VARCHAR" property="postID" />
<!-- 关联查询:用户对应的角色 -->
<association property="roles" javaType="java.util.List"
select="com.csget.dao.base.DaoBaseUser.selectRoles" column="userID"/>
</resultMap> <select id="selectRoles" resultType="java.lang.String">
SELECT roleID FROM t_base_role_user_ref WHERE userID=#{userID}
</select> <select id="selectByMobile" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_base_user where mobile=#{mobile} and isValid='1'
</select> </mapper>
3.get/set方法
public class EntityBaseUser{
//其它属性省略
/**
* 获得:用户的角色列表
*
* @return the roles
*/
public final List<String> getRoles() {
return roles;
} /**
* 设置:用户的角色列表
*
* @param roles
* the roles to set
*/
public final void setRoles(List<String> roles) {
this.roles = roles;
}
}
发现调用getRoles()方法并没有触发延迟加载查询,当断点调试的时候,鼠标放到EntityBaseUser的实例变量上,会立刻触发延迟加载查询,真是很奇怪。
最后怀疑:是不是get/set方法上面加了final导致的,果然去掉之后,发现一切正常了。
mybatis:延迟加载时不要在get/set方法上面添加final关键字(原创)的更多相关文章
- mybatis源代码分析:mybatis延迟加载机制改进
在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...
- mybatis源代码分析:深入了解mybatis延迟加载机制
下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是 ...
- 【MyBatis】MyBatis 延迟加载策略
MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提 ...
- MyBatis延迟加载及在spring中集成配置
当你要使用one to one,many to one 就会碰到N+1的问题.很明显,对象之间关联很多有A关联B,B关联C,C关联A这样的关系,如果不是采用延迟加载,很容易一下在出现成千上万对象 ...
- MyBatis 批量插入数据的 3 种方法!
批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法
PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:select userenv('language') from dual; 显示:SIM ...
- 关于php读mysql数据库时出现乱码的解决方法
关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( ...
- linux上备份Oracle时EXP-00091的错误解决方法
unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable stati ...
- 【百度地图API】当地址解析失败时,如何调用search方法查找地址
原文:[百度地图API]当地址解析失败时,如何调用search方法查找地址 有个朋友问我,当地址解析失败时,应该如何处理呢?比如,他想搜索“南宁市青秀区”. --------------------- ...
随机推荐
- 054、准备 macvlan环境(2019-03-21 周四)
参考https://www.cnblogs.com/CloudMan6/p/7352620.html 除了overlay,docker还开发了另一个支持跨主机容器网络的 driver :macvl ...
- http.lua里的装饰器
摘自:http.lua local co_yield = coroutine.yield local co_create = coroutine.create local co_status = co ...
- JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理
本文记录: 1,使用ScheduledExecutorService的 scheduleAtFixedRate 方法执行周期性任务的过程,讨论了在任务周期执行过程中出现了异常,会导致周期任务失败. 2 ...
- Android资源重命名
Android资源比如图片重命名后,Resource里看到的还是之前的名字,可以关掉AndroidStudio,从新打开就正常了
- 三十四、Linux 进程与信号——信号特点、信号集和信号屏蔽函数
34.1 信号特点 信号的发生是随机的,但信号在何种条件下发生是可预测的 进程杠开始启动时,所有信号的处理方式要么默认,要么忽略:忽略是 SIGUSR1 和 SIGUSR2 两个信号,其他都采取默认方 ...
- mysql单表删除记录DELETE
DELETE FROM tbl_name [WHERE where_condition] mysql> SELECT * FROM users;+----+----------+------- ...
- Coursera, Machine Learning, notes
Basic theory (i) Supervised learning (parametric/non-parametric algorithms, support vector machine ...
- sql server 2008 windows验证改混合登陆中SqlServer身份验证用户名密码
安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本主题介绍如何在安装后更改安全模式. 如果在安装过程中选择“ ...
- JMeter(三)遇到的问题01: 通过CSV Data Set Config参数化有中文时,显示为?
当使用CSV Data Set Config进行参数化,内容中含有中文时,响应文本显示为? 解决办法:只需要将“file encoding”设置为“gb2312”就可以了.
- STL之partition学习
顺便存一下numeric函数的使用方法吧,感觉用处不大. https://blog.csdn.net/baishuo8/article/details/84073565 partition函数,将元素 ...