MyBatis OGNL表达式定义字符串

2025-11-18 10:24:12 1

<if test="@java.util.Objects.equals(param, '1')">
</if>

等同于 Objects.equals(param, '1')

如果param是 "1", 则表达式返回false

因为'1'是char类型



需要改成这样


<if test='@java.util.Objects.equals(param, "1")'>
</if>

这样, 1才是 string

MyBatis OGNL表达式定义字符串

<if test="@java.util.Objects.equals(param, '1')"> </if>等同于 Objects.equals(param, '1')如果param是 "1", 则表达式返回false因为'1'是char类型需要改成这样<if test='@java.util.O
2025-11-18

MyBatis处理一对多关系时的性能考虑

Mybatis框架对于处理一对多的情况有两种方法查询的时候JOIN子表, 然后交给MyBatis拼装数据查询的时候不JOIN子表, 主表查询完成后发起select再查询关联表数据, 还可以配置fetchType=lazy进行懒加载这两种方法各有问题:第一种方案有两个缺陷: 1) 做分页查询的时候不准
2022-02-11

模拟Mybatis"无实现类"调用接口

Mybatis让我们通过接口(interface)就能调用到对应sql, 看起来好像没有实现类, 貌似不符合"常识"通过这个简易demo, 带你大致了解mybatis背后所做的事先建立maven工程 <parent> <groupId>org.springframework.b
2021-02-21

MyBatis是如何让我们通过接口就能调用到SQL的

大致可分为如下几个步骤1. 动态注册bean1.1 根据配置mapperScan, 扫描对应的包, 将对应的类解析成BeanDefinition1.2 通过替换BeanDefinition中的BeanClass为MapperFactoryBean, (原来的BeanClass是Mapper接口) 实
2021-02-13

MyBatis拦截器实现SQL打印

mybatis有自带的sql打印, 但只会出现在抛异常的时候, 或者配置日志输出, 但是输出的日志较为冗长像这样### Error querying database. Cause: java.lang.ArithmeticException: / by zero ### The error ma
2021-02-08
MyBatis拦截器执行顺序

MyBatis拦截器执行顺序

最近项目用上了mybatis, 但是想像hibernate那样能打印sql, 于是写了个基于mybatis拦截器的sql打印, 参考这个https://blog.22xcode.com/post/78然后, 碰到了问题, 拦截器会重复输出一句sqlmybatis sql: SELECT id, na
2021-02-08

关于redis缓存时间设置可能导致的bug

看到在项目代码中有人先调用redisTemplate的方法判断某个key是否存在,然后再调用redisTemplate的方法拿到这个key里的数据。但是,在设置了key缓存时间的情况下,这个逻辑就会出错。比如第一步这个key存在,但是紧接着key过期了,后面就会拿不到这个key,造成后面的逻辑出错所
2020-06-19

事务隔离级别引起的问题

最近碰到了一个事务隔离级别引起的bug在一段业务逻辑中,需要查询两次标志位,但两次查询到的都是同样的结果,一开始以为是hibernate缓存的原因然后一通操作,发现两次查询发了两次sql,于是排除hibernate最后怀疑是隔离级别的问题,在手动设置隔离级别为“读已提交”后,问题解决
2020-07-16

多数据源 单库操作事务不回滚

项目配置了多数据源,之前操作主数据源,直接加上@Transactional(rollbackFor = Exception.class),没有任何问题最近操作其他数据源并做测试的时候,发现int i = 1 / 0并不会回滚,各种排查,从数据库引擎到注解@Transactional使用规范和异常处理
2020-07-27

hutool-http链式调用参数丢失

版本hutool-http-5.2.5如下代码,pathParams的参数会丢失 HttpRequest request = cn.hutool.http.HttpUtil.createRequest(method, url).timeout(TIMEOUT) .
2020-08-26

jpa方法参数必须加上@Param

void deleteByKl(String kl);线上可能报错原因可能是编译时没有加-parameters这个参数, 编译后丢失了参数名称, 使得反射拿不到对应参数需要加上注解void deleteByKl(@Param("kl") String kl);同理public ResultVO de
2020-09-28

map为空时调用keySet()传给jpa导致的bug

userService.deleteNotInId(userMap.keySet()); @Modifying @Query(value = "DELETE FROM user WHERE id NOT IN (:iqs)", nativeQuery = true) void deleteNotIn
2020-09-29

JPA IN or NOT IN 查询时 只能传List

JPA IN 查询时 只能传List
2020-10-28

Spring Boot项目中使用RedisTemplate.delete() 删除指定key失败的解决办法

https://blog.csdn.net/hello_world_qwp/article/details/85763286上面这篇博客扯一大堆, 居然还分析源码实际只是自定义了key的序列化方式导致最终操作redis的时候序列化的key与预期的key不一致而已, 自然就删不掉redis中的数据了
2020-11-26

Dubbo连接不到对应服务

尝试删除C:\Users\用户\nacos该目录, 然后重启项目原因根据官方图,dubbo调用者需要通过注册中心(例如:ZK、nacos)注册信息, 获取提供者,但是如果频繁往ZK获取信息,肯定会存在单点故障问题, 所以dubbo提供了将提供者信息缓存在本地的方法。 Dubbo在订阅注册中心的回调
2021-01-29