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、排查方案
- 实体类注解:查看DockerUserInsNetdisk实体类中是否有与is_valid字段相关的注解,特别是@TableLogic。
- MyBatis Plus配置:检查MyBatis Plus的配置文件或配置代码,看是否有全局过滤插件或其他与查询条件相关的配置。
- 自定义代码:查看是否有自定义的Wrapper或拦截器(Interceptor)在每次查询时都添加了is_valid=1这个条件。
经过排查,发现application配置文件中有global-config
配置,MyBatis Plus 被配置为使用逻辑删除功能。逻辑删除是一种软删除的策略,即在数据库中不真正删除记录,而是通过修改某个字段的值(通常是is_valid
或isValid
这样的字段)来表示记录已经被删除。
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逻辑删除功能的一个特点,旨在简化开发过程中的删除操作,并保留数据的完整性。
如果在执行查询时不想自动添加这个条件,有以下几个选项:
显式地排除逻辑删除条件:在每次查询时,您以通过包装查询条件(如使用
Wrapper
的and()
方法)来显式地排除逻辑删除条件。自定义查询逻辑:自定义查询方法,直接编写SQL语句或使用XML Mapper文件来绕过MyBatis Plus的自动逻辑删除条件添加。
修改配置:如果不需要逻辑删除功能,您可以考虑从配置中移除相关设置,但这可能会影响到应用的其他部分,特别是那些依赖于逻辑删除功能的部分。
使用
unremoved()
方法:在某些版本的MyBatis Plus中,提供了unremoved()
这样的方法,可以在查询时显式地排除逻辑删除条件。