当前位置: 代码网 > it编程>编程语言>Java > MybatisPlus查询条件空字符串和NULL问题背景分析

MybatisPlus查询条件空字符串和NULL问题背景分析

2025年03月13日 Java 我要评论
mybatisplus查询条件空字符串和null问题背景分析mp依赖版本 <dependency> <groupid>com.baomidou</gr

mybatisplus查询条件空字符串和null问题背景分析

mp依赖版本

    <dependency>
        <groupid>com.baomidou</groupid>
        <artifactid>mybatis-plus</artifactid>
        <version>3.3.1.tmp</version>
    </dependency>

问题背景

在使用mp实现条件查询时,如果入参为null或者""时,则mp还是会把其当做条件去执行如图:

入参:

mp官方文档给出解决方案:https://mp.baomidou.com/config/#insertstrategy
个人建议增加全局配置:
mybatis-plus: global-config: db-config: select-strategy: not_empty

但是又出现一个新的问题,id为""时,仍然不会被querywrapper屏蔽掉,还是会被当做条件去查询
入参

执行语句

支持非空字段判断拼接

lambdaupdatewrapper<orders> wrapper = new lambdaupdatewrapper<>();
wrapper.eq(!order.getstate().sempty(),orders::getstate, orders.getstate());

补充:mybatis-plus过滤查询条件中的空字符串

mybatis-plus过滤查询条件中的空字符串

        在使用mybatis-plus查询时,若封装查询条件的bean中有属性为空字符串,是不会被过滤掉的,结果就是执行的sql的where条件中出现某个字段="",导致查询出问题。尤其常见于,在前端页面输入该字段的查询条件后,又清空输入的关键字。

老规矩,先说mybatis-plus版本:3.3.0

有2种思路:

在bean中给字段通过注解,过滤查询时的空字符串;

// value指代对应的数据表的字段名称,wherestrategy 指定查询时的过滤策略
@tablefield(value = "patient_name", wherestrategy = fieldstrategy.not_empty)
private string patientname;

查看源码源码得知,一共有5种字段策略(5种策略也可用于insert或update语句),如下:

package com.baomidou.mybatisplus.annotation;
/**
 * 字段策略枚举类
 *
 * @author hubin
 * @since 2016-09-09
 */
public enum fieldstrategy {
    /**
     * 忽略判断
     */
    ignored,
    /**
     * 非null判断
     */
    not_null,
    /**
     * 非空判断(只对字符串类型字段,其他类型字段依然为非null判断)
     */
    not_empty,
    /**
     * 默认的,一般只用于注解里
     * <p>1. 在全局里代表 not_null</p>
     * <p>2. 在注解里代表 跟随全局</p>
     */
    default,
    /**
     * 不加入 sql
     */
    never
}

        2.在配置文件中,全局配置,以springboot为例。(推荐)

mybatis-plus:
  global-config:
    db-config:
      select-strategy: not_empty

        更多配置可参考mybatis-plus官网配置介绍页面。需要注意的是,在yml配置文件中的配置,不是像官网上的驼峰命名方法。

使用配置 | mybatis-plusmybatis-plus 官方文档

到此这篇关于mybatisplus查询条件空字符串和null问题背景分析的文章就介绍到这了,更多相关mybatisplus查询条件空字符串内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com