Mybatis 中 association 中子查询 BUG
发表于|更新于|🤢奇奇怪怪的BUG
吐槽
上古时期的项目今天又开始修改,真不知道老板在想啥🤮
正文
今天在想代码的时候碰到一个很有意思的 BUG,简单来说就是我在 Mybatis 中的 ResultMap 中添加了一个 association,而在 association 中的查询我又使用了子查询,这就导致我传过来的参数在子查询中接收不到,在 where 条件中却可以
类似与上面的查询虽然都是一个值,但是子查询中却接收不到值,简直是很恶心🤢,上网参考了一下也没有找到相应的答案,这里先记录一下后面解决
相关推荐
2023-01-16
Mybatis or 用法
Mybatis or关键字用法 这里有一个BUG,if test typeIds != null 后面不能跟and,Mybatis if 标签会自动帮我们添加and,需要注意一下
2023-01-07
Mybatis 分页插件 BUG
前沿今天遇到了一个 Mybatis 分页插件 pageHelper 的 BUG,简单来说就是我的查询总数和我的 pageSize 总是一样,这让我很苦恼 解决办法上网查了很多资料,终于找到了解决办法。功夫不负有心人呐,首先我想的是自己手写一个分页方法,但是这个方法被我后面给否决了,原因就是太麻烦了,程序员真的是能偷懒就偷懒,哈哈哈哈哈哈哈,后面我就想到自己收到给它 set 一个 total 进去类似于下面的这种 但是后来我发现这种办法真是太蠢了,这样只是看上去做到了分页,把我想要的数据查出来然后再set进来,理论上是没问题,但是当数据量很大的时候,几十万几百万的情况下查询真的是太慢了!!! 后面我查看了一下 pageHelper 的源码发现 startPage 开启分页方法只对后面的sql查询起作用,所以我们只需要把查询出来的 list 记录下来,然后再跟最终的 list 比较替换一下就好,具体的方法如下 大功告成,不仅实现了分页,而且查询速度效率也很快
2023-03-11
Autowired 和 Resource 的区别
@Autowired @Resource Spring 定义的注解 JDK自带的注解(JSR-250定义的) 默认按类型自动装配(byType) 默认按名称自动装配(byName) 一个参数:required(默认true),表示是否必须注入 七个参数:最重要的两个参数是 name,type 默认按类型自动装配,如果要按名称自动装配,需要和 @Qualifier 一起配合 默认按名称自动装配,如果指定了 name,则按名称自动装配;如果指定了 type,则按类型自动装配 支持优先级,@Primary 注解修饰,该候选者会被选中,作为自动装配的 bean 不支持 作用范围:构造器,方法,参数,成员变量,注解 作用范围:类,成员变量,方法 不知道从什么时候起我的 IDEA 对 @Autowired 一直报黄色的波浪线,使用 alt + enter 查看 IDEA 给的提示是 Field injection is not...
2024-09-02
Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults.
问题复现在使用 macbook pro m2 运行 springboot springcloud 项目时,报错 2024-09-02 20:52:18 [main] ERROR i.n.r.d.DnsServerAddressStreamProvidersUnable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native...
2023-11-19
数据结构
本篇文章主要参考了GitHub的 Hello 算法 数组「数组 array」是一种线性数据结构,其将相同类型元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的「索引 index」 数组常用操作初始化数组我们可以根据需求选用数组的两种初始化方式:无初始值和给定初始值。在未指定初始值的情况下,大多数编程语言会将数组元素初始化为0 12int[] arr = new int[5]; // { 0, 0, 0, 0, 0 }int[] nums = { 1, 3, 2, 5, 4 }; 访问元素数组元素被存储在连续的内存空间中,这意味着计算数组元素的内存地址非常容易。给定数组内存地址(即首元素内存地址)和某个元素的索引,我们可以使用如图所示的公式计算得到该元素的内存地址,从而直接访问此元素(元素内存地址 = 数组内存地址(即首元素地址) + 元素长度 ×; 元素索引)。索引的含义本质上是内存地址的偏移量 1234567int randomAccess(int[] nums) { // 在区间 [0,...
2023-08-16
HashMap 执行流程
HashMap执行流程图流程图https://www.processon.com/diagraming/6532431251d35763b9c31ad3 判断键值对数组 table 是否为空或为 null,否则执行 resize() 进行扩容(初始化) 根据键值 key 计算 hash 值得到数组索引 判断 table[i] == null,条件成立,直接新建节点添加 如果 table[i] == null,不成立 判断 table[i] 的首个元素是否和key一样,如果相同直接覆盖 value 判断 table[i] 是否为 treeNode,即 table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值 遍历 table[i],链表的尾部插入数据,然后判断链表的长度是否大于 8,大于 8 的话把链表转换为红黑树,在红黑树中执行插入操作,遍历过程中若发现 key 已经存在直接覆盖 value 插入成功后,判断实际存在的键值对数量 size 是否超过了最大容量 threadshold(数组长度 * 0.75),如果超过,进行扩容
评论