mybatis 设置全局查询条件

1、mybatis中查询数据库代码,查询条件只哟user_ins_id

DockerUserInsNetdisk netdisk = dockerUserInsNetdiskService
                .lambdaQuery()
                .eq(DockerUserInsNetdisk::getUserInsId, token.getUserInsId())
                .one();

 2、控制台打印执行结果如下,查询语句多了 is_valid=1条件 

select id,user_ins_id,create_time,update_time,is_valid
FROM test_table 
WHERE is_valid=1 
AND (user_ins_id = ?) 

3、可能是设置了全局查询条件 或全局配置 

这通常是因为在应用程序的某个地方(可能是MyBatis Plus的配置或实体类的注解)设置了全局的查询条件或者默认的查询过滤。

在MyBatis Plus中,可以通过多种方式实现全局的查询条件或默认的查询过滤:

1)使用@TableLogic注解:如果在DockerUserInsNetdisk实体类中的isValid字段上使用了@TableLogic注解,并且配置了删除逻辑(例如@TableLogic(value = "is_valid", delval = "0")),那么MyBatis Plus在查询时可能会默认只查询is_valid=1的记录,以排除已逻辑删除的记录。

2)使用全局过滤插件:MyBatis Plus允许您注册全局的过滤插件,这些插件可以在每个查询语句执行前自动添加特定的过滤条件。如果您的应用中注册了这样的插件,并且该插件为DockerUserInsNetdisk实体类添加了is_valid=1的过滤条件,那么这就会导致您看到的SQL语句中自动包含这个条件。

3)自定义Wrapper:虽然代码中使用的是lambda查询,但在某些情况下,应用可能会预先定义一个包含特定条件的Wrapper,并在每次查询时都使用这个Wrapper。如果这个Wrapper包含了is_valid=1的条件,那么每次查询都会包含这个条件。

4、排查方案

  1. 实体类注解:查看DockerUserInsNetdisk实体类中是否有与is_valid字段相关的注解,特别是@TableLogic。
  2. MyBatis Plus配置:检查MyBatis Plus的配置文件或配置代码,看是否有全局过滤插件或其他与查询条件相关的配置。
  3. 自定义代码:查看是否有自定义的Wrapper或拦截器(Interceptor)在每次查询时都添加了is_valid=1这个条件。

 经过排查,发现application配置文件中有global-config配置,MyBatis Plus 被配置为使用逻辑删除功能。逻辑删除是一种软删除的策略,即在数据库中不真正删除记录,而是通过修改某个字段的值(通常是is_validisValid这样的字段)来表示记录已经被删除。

global-config:
  db-config:
    logic-delete-field: isValid # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
    logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
    logic-delete-value: 0 # 逻辑已删除值(默认为 1)

在配置中:

  • logic-delete-field: isValid 指定了逻辑删除的实体字段名为isValid
  • logic-not-delete-value: 1 指定了逻辑未删除的值是1,即当isValid字段的值为1时,记录被认为是有效的。
  • logic-delete-value: 0 指定了逻辑已删除的值是0,即当isValid字段的值为0时,记录被认为是已被删除的。

因此,当执行查询操作时,MyBatis Plus 会自动在生成的SQL语句中添加is_valid=1的条件,以确保只返回逻辑上未被删除的记录。这是MyBatis Plus逻辑删除功能的一个特点,旨在简化开发过程中的删除操作,并保留数据的完整性。

如果在执行查询时不想自动添加这个条件,有以下几个选项:

  1. 显式地排除逻辑删除条件:在每次查询时,您以通过包装查询条件(如使用Wrapperand()方法)来显式地排除逻辑删除条件。

  2. 自定义查询逻辑:自定义查询方法,直接编写SQL语句或使用XML Mapper文件来绕过MyBatis Plus的自动逻辑删除条件添加。

  3. 修改配置:如果不需要逻辑删除功能,您可以考虑从配置中移除相关设置,但这可能会影响到应用的其他部分,特别是那些依赖于逻辑删除功能的部分。

  4. 使用unremoved()方法:在某些版本的MyBatis Plus中,提供了unremoved()这样的方法,可以在查询时显式地排除逻辑删除条件。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值