`

mybatis 的坑

 
阅读更多
ddddd 11:37:06
传进来参数都会空,这个表记录全部被删了?
rrrrr 11:37:12
是的
rrrrr11:37:40
只是想表达,一个很容易被忽略的容易出bug的地方
rrrrrr11:38:04
在上层也没做参数非空校验,sql也这样写的场景下
很容易有这种漏洞
rrrrrr 11:38:44
结论是以后制定项目规范时
delete语句不要带if
ccccc 11:38:52
双击查看原图我也干过
ccccc 11:38:58
我的是update
cccccc 11:39:16
结果传进来的参数是null,全表更新
cccccc11:39:26
我学过,但是没有用过mybatis双击查看原图
xxxxxxx 11:40:02
都是很低级和粗浅的bug
xxxxxx 11:40:24
确实容易忽略这个bug
ddddd11:40:52
有时只传一个参数,也有bug
ccccccc11:41:16
updateByPrimaryKey不写if
xxxxxx 11:41:18
阿里有自己的orm框架么
vvvvvvvv11:41:46
你们写的时候习惯加上!=‘’么
sssssss 11:41:49
delete也一样
ccccccc 11:41:55

xxxxxx 11:41:56
这里有两个delete的where条件
userid和id
作者本意应该是:用userid做类似于(只有本人才可以删自己数据的校验),id是删除数据的依据

但如果传过来的id为空的话
结果本人下的数据全都删除了
xxxxxxxxx11:42:13
我会加上!=''
xxxxxxxx 11:42:34
有时候
<where>
  if(会有七八个,十几个这么多)
<where>

漏掉一两个在前端没校验是很容易的
xxxxxxxx 11:42:51
尤其集合基类
xxxxxxxx 11:43:21
就造成
本意是 id集合不传,一个都不动
结果编程id集合不传,所有的数据都变了(删了)
xxxxxxxxxxx 11:43:56
这个还真没注意到
xxxxxxxx) 11:44:10
看来要强加一个!=
淡(dddd) 11:44:28
必须条件不要加
xxxxxxx) 11:44:46
!=‘’只针对字符串类型
对集合类型没用
小八(df) 11:44:56
并且不是这个意思
小八(ff) 11:45:08

淡(ff) 11:45:17
上个月就因为这个,我把一张表的其中一个字段全部update了
小八(ff) 11:45:18
再看下这条简单的sql
小八(ff) 11:45:38
就是因为条件不满足,所以才删全表
梅小西(ff) 11:46:47
那就是说sql没法做到验证咯
小八(ff) 11:46:48
我要表达的意思是
update和delete,最好没有动态条件
梅小西(fff) 11:46:51
只能逻辑层验证么
小八(fff) 11:47:25
有了动态条件,当动态条件里的if xxx不满足时
反而会变成,不满足条件的所有数据被更新(或删除)
小八(fff) 11:48:05
满足动态条件,就是部分数据更新(删除)
不满足动态条件,所有数据被更新(删除)
这是一个很容易被忽略的漏洞
淡(fff) 11:49:55
sql可以验证啊,不过很麻烦
淡(fff) 11:50:16
一两个字段还好,多了就很难看
淡(fff) 11:50:52
if test里写一大堆|| &&看着难看
小八(fff) 11:53:50
结论是,delete和update别加if做动态条件
淡(fff) 11:54:13
自动生成的mapper文件,ByPrimaryKey都没有if的
淡(ffff) 11:54:30
byExample有
分享到:
评论

相关推荐

    Mybatis坑之collection单属性list

    在本文提到的场景中,开发者遇到了一个关于`collection`的坑,即查询结果中的`id`与`supplierOrganizationIdList`里的值相同,导致数据不正确。这个问题的解决关键在于SQL查询语句的顺序。 首先,我们分析一下原...

    mybatis反向工程.根据数据库表生成wrapper xml文件和类

    在某些情况下,开发者可能会遇到MyBatis-Plus主键生成的坑,例如,预设的主键生成策略可能并不符合项目需求,这时就需要对`TableId`和`TableField`进行定制,以支持标注方法来实现主键生成。 Spring Boot与MyBatis...

    Spring_boot_mybatis_sqlite.zip

    网上看了很多Sqping boot + Mavn + mybatis + sqlite的配置,发现了很多坑,尤其是涉及到有增删改查的问题时候,这里整理了一下,希望对大家有帮助,这里用的是Spring boot 2.2.1 release,Intellij Idea的mavn工程,...

    springboot2.1.3 + mysql(mybatis) + mongodb maven项目

    该项目是一个集成SpringBoot 2.1.3、MySQL(MyBatis)、MongoDB的Maven工程,旨在构建一个能够同时处理关系型数据和非关系型数据的系统。下面将详细介绍这三个核心组件及其在项目中的作用。 **SpringBoot 2.1.3** ...

    mybatis+Oracle做批量导入时的坑

    在Java开发中,MyBatis框架与Oracle数据库结合进行批量数据导入时,可能会遇到一些问题。本文将详细探讨这些问题,并提供一种可行的解决方案。 首先,批量插入操作在DAO层,我们定义了一个`insertList`方法,它接收...

    Mybatis plus经验案例.zip

    针对mybatis plus的一次采坑经验案例,此案例可能很多人都经历过;个人总结,能力有限,如有不足还请见谅

    mybatis-plus id主键生成的坑

    确保实体类的主键类型与数据库表结构相匹配,同时根据业务场景选择合适的 ID 生成策略,将有助于避免类似“主键生成的坑”的问题。在开发过程中,及时检查日志,排查潜在错误,对于提升系统的稳定性和可维护性...

    Spring boot+Mybatis整合实现增删改查(适合初学者入门必备也可以做脚手架开发)

    6.json插件使用阿里的开源fastjson工具,注意低版本的fastjson与swagger不兼容,这里有坑; 7.包含了一个文件上传的功能,可上传单个或多个文件; 8.Excel导入导出工具使用EasyPOI来完成:https://easypoi.mydoc.io/ ...

    MyBatis一级缓存避坑完全指南

    MyBatis一级缓存避坑完全指南 MyBatis一级缓存是MyBatis框架中的一种缓存机制,用于提高数据库查询的性能。缓存的作用域为一次会话中,缓存随着会话(SqlSession)的创建而产生,随着会话结束而释放。在一次会话中,...

    详解mybatis.generator配上最新的mysql 8.0.11的一些坑

    然而,在配置MyBatis Generator与最新的MySQL 8.0.11时,可能会遇到一些坑。下面将详细介绍MyBatis Generator的配置和踩坑指南,以帮助开发者快速上手。 一、MyBatis Generator简介 MyBatis Generator是一款自动...

    spring boot + mybatis+ mysql环境搭建

    最近在尝试从0开始搭建框架,结果在mybatis这块就踩了很多坑。于是就决定写篇文章记录一下。 https://blog.csdn.net/lxyoucan/article/details/126233203

    mybatis逆向工程与分页在springboot中的应用及遇到坑

    "mybatis逆向工程与分页在springboot中的应用及遇到坑" 在本文中,我们将讨论MyBatis逆向工程与分页在Spring Boot中的应用,并分享在项目中遇到的坑和解决方案。 一、MyBatis逆向工程 MyBatis逆向工程是一个强大...

    详解mybatis-plus的 mapper.xml 路径配置的坑

    在使用Mybatis-Plus时,有时我们可能会遇到mapper.xml文件未被正确读取的问题,这通常是由于配置不正确导致的。本文将详细讲解mybatis-plus的mapper.xml路径配置的常见问题,并提供解决策略。 首先,我们需要理解...

    SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】.doc

    #### 二、踩过的坑 在实现过程中遇到了一些常见问题,下面将逐一介绍并提供解决方案: ##### 1. 数据源问题 **问题描述**:在引入Druid作为数据源时,使用`druid-spring-boot-starter`依赖会出现启动失败的问题。...

    springMVC+pring+myBatis所需jar

    一个从零开始的SSM框架Demo对一个新手来说,是非常重要的,可大大减少在学习过程中遇到的各种各样的坑,说到最后,也算是助人为乐吧!下面我们从零开始进行SSM框架的搭建,在介绍最后,我会把项目部署在GitHub以便...

    web6_mybatis_ALL.zip

    8. **注释的重要性**:在示例中,开发者在有坑的地方添加了注释,这有助于理解潜在的问题和解决方案。在实际开发中,良好的注释习惯能提高代码可读性和团队协作效率。 通过这个压缩包,你可以逐步学习并实践MyBatis...

    Spring和MyBatis整合自动生成代码里面text类型遇到的坑

    Spring和MyBatis整合以后,使用自动生成代码工具生成dao和mapper配置文件。下面通过本文给大家介绍Spring和MyBatis整合自动生成代码里面text类型遇到的坑,需要的朋友参考下吧

    MyBatis基本使用方法.rtf

    Mybatis基本使用方法但是没有注解使用方法

    使用mybatis-plus的insert方法遇到的问题及解决方法(添加时id值不存在异常)

    MyBatis-Plus 是 MyBatis 的一个扩展,它提供了许多高级功能,简化了数据库操作。在使用 MyBatis-Plus 的 `insert` 方法时,可能会遇到一些问题,特别是当尝试插入新记录时,可能会遇到“id 值不存在异常”。这个...

    Mybatis-Plus3.2.0 MetaObjectHandler 无法进行公共字段全局填充

    Mybatis-Plus 是 Mybatis 的一个扩展库,它提供了许多便捷的功能,如自动化 CRUD 操作、条件构造器等。在 Mybatis-Plus 中,`MetaObjectHandler` 是一个用于自动填充公共字段的接口,比如创建时间和更新时间。然而,...

Global site tag (gtag.js) - Google Analytics