首页 > 其他分享 >MyBatis Bug 记录

MyBatis Bug 记录

时间:2023-07-16 10:35:51浏览次数:32  
标签:记录 age Number 问题 类型 SqlSession MyBatis null Bug

动态SQL

If 参数

Mybatis if 判断 Integer 类型的值不等于 '' 引发的问题(!='' 等价于 !=0)
csdn-ref

结论

对于 Number 类型参数,age != '' 被 Mybatis 认定为 age != 0

解决方案

  1. ✅ 使用 1,2 来表示数据含义
  2. ✅ 添加 or age == 0,来规避该问题
  3. ✅ 修改字段类型为 varchar
  4. 不使用 Number 类型,改用基本类型,但是基本类型存在数据允许为 null 时可能导致的异常

问题分析

黑盒分析

把底层原因看作黑盒,先不考虑 mybatis 源码等问题,先通过语法,参数排查掉外因,再通过判断找到问题的表象。

比如这个问题的表象就是If test 语句中,Number 类型参数为 0 时, 无法正确通过 test = "age != null & age != ''" 的判断。

采用解决方案 2, 通过逻辑来规避该问题

白盒分析

如果有必要,才进一步挖掘问题的原因,往往会受益。

比如导致该问题的原因是 OGNL 表达式,在判断 xx != '' 时,会执行 xx != ''.toString().length 操作,那么你就可以规避在那些所有使用 OGNL 库的框架中出现类似的问题。

常见异常

SqlSession was not registered for......

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ad37127] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@68085783] will not be managed by Spring
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ad37127]

大部分情况下 sql 语句直接使用了值为 null 的参数后,就会打印以上信息。

标签:记录,age,Number,问题,类型,SqlSession,MyBatis,null,Bug
From: https://www.cnblogs.com/ivanohohoh/p/17557524.html

相关文章

  • MySQL8 Bug 记录
    配置相关MySQL8安全插件更新导致的兼容性问题mysql8提供了新的功能,这些功能会影响用户创建或更新用户密码,以及使用那些仅支持mysql5登陆方式的客户端工具PasswordValidationOptionsandVariablesAuthenticationPlugins密码验证组件该组件要求用户必须设置符合一定......
  • MyBatis Generator代码生成器
    地址:http://mybatis.org/generator/quickstart.html 依赖<!--mybatis代码生成--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId>......
  • MybatisPlus
    目录configMybatisPlusConfig.javapackagecom.bijian.mybatisplus.config;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner......
  • TryHackMe | Daily Bugle Writeup
    TryHackMe|DailyBugleWriteup信息收集:可以看到cms是Joomla,然后有一个administrator二级目录,然后开启了mysql服务使用joomscan针对目标站点进行扫描,joomscan是一个专门用于扫描JoomlaCMS的工具。joomscan-uhttp://10.10.184.75 可以看到版本是Joomla3.7.0,到expl......
  • 【Azure K8S】记录AKS VMSS实例日志收集方式
    问题描述如何从AKS的VMSS集群中收集实例日志? 参考步骤第一步:登陆VMSS实例参考官网步骤:使用SSH连接到AzureKubernetes服务(AKS)群集节点以进行维护或故障排除: https://docs.azure.cn/zh-cn/aks/ssh#configure-virtual-machine-scale-set-based-aks-clusters-for-ssh......
  • 2023上半年阅读记录
    阅读半年了,也该有个小回顾了。半年前,因为焦虑,在罗翔和欧丽娟老师的视频下,慢慢觉得解决问题的方法思路可能还是得到书中去找,也算慢慢读到一些书,似乎解决了一些疑惑、迷茫。人生是自己的,所以跟着自己的心去寻找,寻找那种为之奋斗一辈子的目标,设计以心流框架,在具体实现中慢慢调整。另......
  • 创建Spring Boot+Spring MVC+Mybatis Demo项目
    参考资料IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂)创建项目创建多个目录把application.properties改成yml格式并补充配置mysql中创建数据库和表createdatabasedb1;usedb1;createtable`user`( `id`INTUNSIGNEDAUTO_INCREMENT, `name`VARCHAR(......
  • 使用MyBatis Plus
    IDEA配置IDEA安装MyBatisX插件。根据IDEA指引来创建SpringBoot项目mybatisplus-demo1。添加依赖添加mybatisplus和lombok依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.0&......
  • MyBatis框架使用问题
    Mybatis根据数组或者List查询List结果数组参数//接口方法ArrayList<User>selectByIds(Integer[]ids);//xml映射文件<selectid="selectByIds"resultMap="BaseResultMap">select*fromuserwhereidin<foreachitem="item&quo......
  • VS(VisualStudio) 远程调试 (RemoteDebugger)
    VS远程调试方法,下面用一张图说明:参考:https://blog.csdn.net/qq_33538554/article/details/98957450,下面是详情操作:注意:另一篇博文可以参考:https://mp.weixin.qq.com/s/G4m5v7l4kCwvM9LtKu0zVQ......