【MyBatis系列】MyBatis字符串问题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
- 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
- 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
- 一.基本介绍
- 1.什么是 MyBatis?
- 2.MyBatis 特点?
- 二.故障还原
- 1.业务代码
- 2.bug 现象
- 3.打印执行 sql
- 三.解决方案
- 1.定位 bug
- 2.问题分析
- 3.解决方案
一.基本介绍
1.什么是 MyBatis?
MyBatis 是一个基于 Java 的持久层框架,它提供了面向 SQL 的数据访问层,使得在应用程序中能够更方便地管理和操作数据库。MyBatis 的目标是通过简化数据库访问的过程来提高开发人员的工作效率。
2.MyBatis 特点?
以下是 MyBatis 的一些关键特点和概念:
-
SQL 映射文件: MyBatis 使用 XML 文件或注解来配置 SQL 语句和数据库映射。这些文件定义了 SQL 查询、更新、删除等操作,以及结果集与 Java 对象之间的映射关系。
-
面向 SQL 编程: MyBatis 允许开发人员直接编写原生 SQL 查询,也可以在 SQL 映射文件中使用动态 SQL。这使得开发人员可以更灵活地控制数据库操作。
-
对象关系映射(ORM): MyBatis 支持将数据库表的行映射为 Java 对象,简化了数据库操作时数据的转换过程。开发人员可以通过配置文件或注解来定义对象与数据库表之间的映射关系。
-
自动映射: MyBatis 提供了自动映射功能,可以自动将查询结果集映射到 Java 对象中,减少了手动编写映射代码的工作量。
-
事务管理: MyBatis 支持事务管理,开发人员可以通过配置文件或编程方式来管理事务,确保数据库操作的一致性和可靠性。
-
灵活性: MyBatis 不强制开发人员使用特定的模型或架构,允许开发人员按照自己的需求来组织代码和配置。
MyBatis 在 Java 开发中被广泛应用于持久层的开发,尤其在与关系型数据库交互的项目中。它的设计目标是简化数据库访问,并提供开发人员更多的控制权,使得数据库操作更加灵活和高效。
二.故障还原
1.业务代码
List<ProductAllexinfoDTO> products = productAllexinfoMapper.totalList(totalListQuery);
2.bug 现象
List<ProductAllexinfoDTO> products = productAllexinfoMapper.totalList(totalListQuery);
这行代码未执行时,debug 看到 totalListQuery 中 name 的值是“李丽”,但是当这行代码执行完了之后 name 的值变为了“王五”,因为代码就这么一点点,那么问题一定是出在 totalList 方法里面
3.打印执行 sql
select * from xx_table where name ='王五'
这就很奇怪了,传入的是李丽,为啥 sql 的参数是王五呢?
三.解决方案
1.定位 bug
select * from xx_table
<choose><when test="query.name != null and query.name != '' and query.name = '王五' ">and region.name = #{query.name}</when><otherwise>and region.name = '六六'</otherwise>
</choose>
2.问题分析
看到这里,恍然大悟,之前确实没有遇到过这样的问题,最关键的是这样写 mybatis 居然认为是对的,没有报错
#把王五的值赋值给了name属性,导致sql的参数和后续的name都是王五
query.name = '王五'
3.解决方案
- 首先=‘王五’这里,
需要改为两个==,这里一定要记住,不能搞混了,一个等号 mybatis 是不报错的 - 其次,在有字符串判断的时候,需要给
外层加单引号,内层加双引号
select * from xx_table
<choose><when test='query.name != null and query.name != "" and query.name == "王五" '>and region.name = #{query.name}</when><otherwise>and region.name = '六六'</otherwise>
</choose>
觉得有用的话点个赞
👍🏻呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
相关文章:
【MyBatis系列】MyBatis字符串问题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【Java】构建表达式二叉树和表达式二叉树求值
问题背景 1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串,输出该算术表达式的值。要求: (1)系统至少能实现加、减、乘、除等运算; (2)利用二叉…...
采用Python 将PDF文件按照页码进行切分并保存
工作中经常会遇到 需要将一个大的PDF文件 进行切分,比如仅需要大PDF文件的某几页 或者连续几页,一开始都是用会员版本的WPS,但是对于程序员,就是要采用技术白嫖 这里就介绍一个 python的PDF 包 PyPDF2 其安装方式也很简单 p…...
H264视频编码原理
说到视频,我们首先想到的可能就是占内存。我们知道一个视频是由一连串图像序列组成的,视频中图像一般是 YUV 格式。假设有一个电影视频,分辨率是 1080P,帧率是 25fps,并且时长是 2 小时,如果不做视频压缩的…...
UDP实现群聊
代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class liaotian extends JFrame{private static final int DEFAULT_PORT8899;private JLabel stateLB…...
服务器部署网易开源TTS | EmotiVoice部署教程
一、环境 ubuntu 20.04 python 3.8 cuda 11.8二、部署 1、docker方式部署 1.1、安装docker 如何安装docker,可以参考这篇文章 1.2、拉取镜像 docker run -dp 127.0.0.1:8501:8501 syq163/emoti-voice:latest2、完整安装 安装python依赖 conda create -n Emo…...
贪心算法和动态规划
目录 一、简介 二、贪心算法案例:活动选择问题 1.原理介绍 三、动态规划案例:背包问题 1.原理介绍 四、贪心算法与动态规划的区别 五、总结 作者其他文章链接 正则表达式-CSDN博客 深入理解HashMap:Java中的键值对存储利器-CSDN博客…...
jsp 设备预约管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 设备预约管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…...
Python:核心知识点整理大全10-笔记
目录 5.4 使用 if 语句处理列表 5.4.1 检查特殊元素 toppings.py 5.4.2 确定列表不是空的 5.4.3 使用多个列表 5.5 设置 if 语句的格式 5.6 小结 第6章 字 典 6.1 一个简单的字典 alien.py 6.2 使用字典 6.2.1 访问字典中的值 6.2.2 添加键—值对 6.2.3 先创建一…...
Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换
文章目录 一、Hive数据类型1.1、数值类型1.2、字符类型1.3、日期时间类型1.4、其他类型1.5、集合数据类型1.5.1、Struct举例1.5.2、Array举例1.5.3、Map举例 二、数据类型转换2.1、隐式转换2.2、显示转换 三、字段类型的使用3.1、DECIMAL(precision,scale) 本章主要…...
在Spring Cloud中使用组件Ribbon和Feign,并分别创建子模块注册到Eureka中去
ok,在上篇文章中我们讲了在Spring cloud中使用Zuul网关,这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。 题外话,本篇博客就是配置子模块,或者说是微服务,然后将微服务正式启动之前…...
(JAVA)-缓冲流
缓冲流能高效的读取数据 缓冲流底层自带了8192的缓冲区提高性能,他在原有的流上进行了包装,加上了缓冲效果 原理: 读入时首先会将内存中缓冲区大小的数据读入缓冲区中,接着下次读取直接从缓冲区中读取数据,当缓冲区…...
Autosar UDS-CAN诊断开发02-1(CAN诊断帧格式类型详解、CANFD诊断帧格式类型详解、15765-2(CANTP层)的意义)
目录 前言 CANTP层(15765-2协议)存在的意义 CANTP层(15765-2协议)帧类型详细解读(普通CAN格式) 四种诊断报文类型 单帧SingleFrame(SF) 首帧:FirstFrame(FF) 流控帧:FlowCont…...
swing快速入门(三)
解答一下上一篇关于留下的关于布局管理器的疑问 上一篇 几种常见的布局管理器 看不懂?看不懂没关系,这篇是概念篇,大概了解一下就行~ 1.FlowLayout(流式布局):按照从左到右、从上到下的顺序依次排列组件。…...
Swagger PHP Thinkphp 接口文档
安装 1. 安装依赖 composer require zircote/swagger-php 2. 下载Swagger UI git clone https://github.com/swagger-api/swagger-ui.git 3. 复制下载好的Swagger UI 中的dist目录到public目录中,修改目录名称 cp -rf swagger-ui/dist /home/htdocs/public/ m…...
12.9每日一题(备战蓝桥杯循环结构)
12.9每日一题(备战蓝桥杯循环结构) 题目 2165: 求平均年龄题目描述输入输出样例输入样例输出来源/分类 题解 2165: 求平均年龄题目 2166: 均值题目描述输入输出样例输入样例输出来源/分类 题解 2166: 均值题目 2167: 求整数的和与均值题目描述输入输出样…...
与时代共进退
还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天࿰…...
Python 云服务器应用,Https,定时重启
Python 云服务器应用,Https,定时重启 环境搭建Python模块模块导入生成Flask实例GET处理启动服务器打开网页验证 GET接入证书 支持https申请证书下载证书保留 xxx.crt 和 xxx.key文件就可以了 copy到python项目目录ssl_context 配置 宝塔面板操作在www目录下新建python工作目录在…...
pytorch 笔记:dist 和 cdist
1 dist 1.1 基本使用方法 torch.dist(input, other, p2) 计算两个Tensor之间的p-范数 1.2 主要参数 input输入张量other另一个输入张量p范数 input 和 other的形状需要是可广播的 1.3 举例 import torchxtorch.randn(4) x #tensor([ 1.2698, -0.1209, 0.0462, -1.3271…...
Java的List中的各种浅拷贝和深拷贝问题
先来看一组代码 public class Temp{public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(1);list.add(2);list.add(3);List<Integer> temp list;list.add(4);System.out.println(list.toString());System.out.print…...
Qwen3-TTS开源模型教程:Gradio接口封装+API服务发布完整指南
Qwen3-TTS开源模型教程:Gradio接口封装API服务发布完整指南 1. 前言:为什么你需要一个专属的语音合成服务? 想象一下,你正在开发一个智能客服应用,需要为不同国家的用户提供多语言的语音回复;或者你是一个…...
番茄小说离线阅读解决方案:打造你的个人数字图书馆
番茄小说离线阅读解决方案:打造你的个人数字图书馆 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 在数字阅读时代,你是否曾遇到过这样的困扰:网络信号不…...
Catalyst API 认证管理:处理 OAuth Token 失效问题
在使用 Catalyst API 进行数据操作时,OAuth Token 的管理是至关重要的。特别是当你尝试插入新记录到 Catalyst Datastore 表时,可能会遇到 “INVALID OAUTH TOKEN” 错误。本文将详细介绍如何有效地处理这一问题,并提供一个实际的示例来演示解决方案。 问题描述 在尝试使用…...
突破限制:NCM音乐格式转换与跨平台播放完全指南
突破限制:NCM音乐格式转换与跨平台播放完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 音乐文件解密是许多音乐爱好者面临的实际需求,尤其是当你希望在不同设备上自由播放从网易云音乐下载的NCM格式文…...
Qwen3.5-9B图文对话实战:工业设备铭牌识别+参数查询+维保周期提醒
Qwen3.5-9B图文对话实战:工业设备铭牌识别参数查询维保周期提醒 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,特别适合工业场景下的图文对话应用。这个项目展示了如何利用其多模态能力,实现工业设备铭牌识别、参数查询和维保…...
XHS-Downloader:解决小红书内容高效采集难题的开源解决方案
XHS-Downloader:解决小红书内容高效采集难题的开源解决方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
如何将笔记从 iCloud 传输到 iPhone:分步指南
iPhone 上的“备忘录”应用是一款便捷的工具,可以用来记录待办事项、日记、想法等等。它能帮助我们追踪需要完成的事情。借助 iCloud 的自动同步功能,你的备忘录可以安全地存储在云端,并可通过任何 Apple 设备甚至电脑访问。将笔记从 iPhone …...
PyTorch 2.8镜像工业设计:CAD图纸→AI生成产品渲染视频→营销素材输出
PyTorch 2.8镜像工业设计:CAD图纸→AI生成产品渲染视频→营销素材输出 1. 工业设计新范式:从CAD到营销视频的全流程AI化 传统工业设计流程中,从CAD图纸到产品营销素材的转化往往需要耗费大量时间和人力成本。设计师需要先完成3D建模&#x…...
MAI-UI-8B入门:Node.js环境配置与自动化测试
MAI-UI-8B入门:Node.js环境配置与自动化测试 1. 开篇:为什么选择MAI-UI-8B进行自动化测试 如果你正在寻找一个能够真正理解图形界面、像真人一样操作应用的自动化测试方案,MAI-UI-8B绝对值得关注。这个由阿里通义实验室开源的GUI智能体模型…...
Wan2.2-I2V-A14B企业应用:法律文书解读AI动画视频生成系统
Wan2.2-I2V-A14B企业应用:法律文书解读AI动画视频生成系统 1. 系统概述与核心价值 法律行业每天需要处理大量文书材料,传统的人工解读和可视化呈现方式效率低下且成本高昂。Wan2.2-I2V-A14B法律文书解读AI动画视频生成系统正是为解决这一痛点而生。 这…...

