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()这样的方法,可以在查询时显式地排除逻辑删除条件。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐