【MyBatis系列】MyBatis字符串问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐: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 的一些关键特点和概念:

  1. SQL 映射文件: MyBatis 使用 XML 文件或注解来配置 SQL 语句和数据库映射。这些文件定义了 SQL 查询、更新、删除等操作,以及结果集与 Java 对象之间的映射关系。

  2. 面向 SQL 编程: MyBatis 允许开发人员直接编写原生 SQL 查询,也可以在 SQL 映射文件中使用动态 SQL。这使得开发人员可以更灵活地控制数据库操作。

  3. 对象关系映射(ORM): MyBatis 支持将数据库表的行映射为 Java 对象,简化了数据库操作时数据的转换过程。开发人员可以通过配置文件或注解来定义对象与数据库表之间的映射关系。

  4. 自动映射: MyBatis 提供了自动映射功能,可以自动将查询结果集映射到 Java 对象中,减少了手动编写映射代码的工作量。

  5. 事务管理: MyBatis 支持事务管理,开发人员可以通过配置文件或编程方式来管理事务,确保数据库操作的一致性和可靠性。

  6. 灵活性: 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理

1、参考文档 Spring Cloud Alibaba参考文档 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html Spring Cloud Alibaba官方文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/ 2、引入 Alibaba 依赖 每个 SpringBoot 都有对应的…

css中2D和3D的区别

CSS中2D和3D的主要区别在于&#xff1a; 维度不同&#xff1a;2D是二维平面&#xff0c;3D是三维空间。可视角度不同&#xff1a;2D只能从一个平面角度看&#xff0c;而3D可以在多个角度上观察。技术难度不同&#xff1a;3D效果需要更复杂的技术支持&#xff0c;如矩阵变换&am…

javascript实现Stack(栈)数据结构

上一篇文章我们理解了List这种数据结构&#xff0c;知道了它的特点和一些使用场景&#xff0c;这篇文章我们就来看一下栈这种数据结构&#xff0c;这里的栈可不是客栈哦&#xff0c;哈哈 栈其实和List非常像&#xff0c;使用javascript实现都是基于数组来实现 尝试理解Stack …

6种常见的JS模块打包器

前言 JS模块打包器是一种工具&#xff0c;它可以将多个JS文件或模块合并成一个或多个输出文件&#xff0c;以便在浏览器或其他环境中使用。 JS模块打包器的作用有&#xff1a; 优化代码&#xff1a;通过压缩、混淆、删除无用代码等方式&#xff0c;减少代码的体积和复杂度&…

windows系统和虚拟机上ubuntu系统通过虚拟串口进行通信

本文的目的是实现windows系统和虚拟机上安装的ubuntu通过串口进行通信。为了直观观测串口收发数据的内容&#xff0c;需要在windows系统和ubuntu系统使用串口助手来进行监听。windows系统端用的监听工具是串口助手SSCOM&#xff0c;ubuntu系统端使用的串口助手是CuteCom。 ubu…

OpenCL学习笔记(一)开发环境搭建(win10+vs2019)

前言 异构编程开发&#xff0c;在高性能编程中有重要的&#xff0c;笔者本次只简单介绍下&#xff0c;如何搭建简单的开发环境&#xff0c;可以供有需要的小伙伴们开发测试使用 一、获取opencl的sdk库 1.使用cuda库 若本机有Nvidia的显卡&#xff0c;在安装cuda库后&#x…

如何提高大模型在超长上下文的表现?Claude实验表明加一句prompt立即提升效果~

本文来自DataLearnerAI官方网站&#xff1a;如何提高大模型在超长上下文的表现&#xff1f;Claude实验表明加一句prompt立即提升效果~ | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701947131881 Claude 2.1版本的模型上下文长度最高拓展到200K&am…

【Flink系列四】Window及Watermark

3.1、window 在 Flink 中 Window 可以将无限流切分成有限流&#xff0c;是处理有限流的核心组件&#xff0c;现在 Flink 中 Window 可以是时间驱动的&#xff08;Time Window&#xff09;&#xff0c;也可以是数据驱动的&#xff08;Count Window&#xff09;。 Flink中的窗口…

c jpeg YUV图片帧分割成 8*8 块 ,与逆向把8*8还原为帧

1. 正向分割为若干8*8 块 下面的程序为通用程序&#xff0c;可以分割任意块 #include <stdlib.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h>…

如果微软20年前开发.net core,JAVA会不会和IE一样倒下了

可以跨平台&#xff0c;大量类库&#xff0c;微软亲自操刀&#xff0c;性能一流&#xff0c;因为没有做跨平台&#xff0c;.NET被 python,javascript等抢了一半以上市场。 如果微软早早的推出类似.net core这样的跨平台语言&#xff0c;.net程序猿还会出在这样的尴尬局面吗众所…

Java基础-开发流程以及HelloWorld程序

目录 1. Java的开发流程2. HelloWorld 1. Java的开发流程 开发Java程序&#xff0c;需要三个步骤&#xff1a;编写代码&#xff0c;编译代码&#xff0c;运行代码 2. HelloWorld 编写代码 public class HelloWorld {public static void main(String[] args) {System.out.pri…

Ribbon 饥饿加载

Ribbon默认是采用懒加载&#xff0c;即第一次访问时才会去创建LoadBalanceClient&#xff0c;请求时间会很长而饥饿加载则会在项目启动时创建&#xff0c;降低第一次访问的耗时&#xff0c;通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…

代码随想录二刷 |二叉树 | 二叉树的层序遍历

代码随想录二刷 &#xff5c;二叉树 &#xff5c; 二叉树的层序遍历 题目描述解题思路代码实现 题目描述 102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例…

Flask 最佳实践(一)

Flask是一个轻量级而强大的Python Web框架&#xff0c;它的简洁性和灵活性使其成为许多开发者的首选。然而&#xff0c;为了确保项目的可维护性和可扩展性&#xff0c;我们需要遵循一些最佳实践。本文将探讨Flask中一些关键的最佳实践。 1. 项目结构 构建一个清晰的项目结构是…

Java实现Socket聊天室

一、网络编程是什么&#xff1f; 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行数据传输。 应用场景&#xff1a;即时通讯、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景&#xff0c;都是计算机与计算机之间通过网络进行数据传输。 …

软件测试之接口测试自动化(详解版)

本着以和大家交流如何实现高效的接口测试为出发点&#xff0c;本文包含了我在接口测试领域的一些方法和心得&#xff0c;希望大家一起讨论和分享&#xff0c;内容包括但不仅限于&#xff1a; 服务端接口测试介绍接口测试自动化介绍接口测试自动化实践关于接口测试自动化的思考…

质量工程化,交付快速化

质量和速度之间权衡让人很难取舍&#xff0c;而通过推进质量工程&#xff0c;以系统化的方式识别和优化系统痛点&#xff0c;可以帮助团队构建既快又好的精益软件生产系统。原文: Quality Engineered, Speed Delivered 所有人都想要更快的速度。 但需要解决复杂问题: 权衡质量会…

Kotlin(十四) 扩展函数和运算符重载

目录 扩展函数 语法结构 代码示例 运算符重载 语法结构 一元操作符 二元操作符 数值类型操作符 等于和不等于操作符 比较操作符 调用操作符 扩展函数 语法结构 对于扩张函数的语法结构其实很简单&#xff0c;你想在那个类中添加扩张函数&#xff0c;那么你就用该类…

6. Zigzag Conversion

按照下标找规律注意leetcode的运行输出&#xff0c;如果其中一组用例出现死循环&#xff0c;输出结果会在一个文件&#xff0c;即部分测试用例正确&#xff0c;部分错误且出现死循环&#xff0c;则需辨别输出结果属于哪一份测试用例 class Solution { public:string convert(s…

(二)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…