做网站怎么在图片上加文字,购物网站建设实训心得体会,原画培训班一般学费多少,淮南网站推广#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学… 欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐: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.定位 bug2.问题分析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.业务代码 ListProductAllexinfoDTO products productAllexinfoMapper.totalList(totalListQuery);2.bug 现象
ListProductAllexinfoDTO products productAllexinfoMapper.totalList(totalListQuery);这行代码未执行时,debug 看到 totalListQuery 中 name 的值是“李丽”,但是当这行代码执行完了之后 name 的值变为了“王五”,因为代码就这么一点点,那么问题一定是出在 totalList 方法里面
3.打印执行 sql
select * from xx_table where name 王五这就很奇怪了,传入的是李丽,为啥 sql 的参数是王五呢?
三.解决方案
1.定位 bug
select * from xx_table
choosewhen testquery.name ! null and query.name ! and query.name 王五 and region.name #{query.name}/whenotherwiseand region.name 六六/otherwise
/choose2.问题分析
看到这里,恍然大悟,之前确实没有遇到过这样的问题,最关键的是这样写 mybatis 居然认为是对的,没有报错
#把王五的值赋值给了name属性,导致sql的参数和后续的name都是王五
query.name 王五3.解决方案
首先‘王五’这里,需要改为两个,这里一定要记住,不能搞混了,一个等号 mybatis 是不报错的其次,在有字符串判断的时候,需要给外层加单引号,内层加双引号
select * from xx_table
choosewhen testquery.name ! null and query.name ! and query.name 王五 and region.name #{query.name}/whenotherwiseand region.name 六六/otherwise
/choose觉得有用的话点个赞 呗。 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正 如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧