Mybatis Plus 在进行多表查询时,默认会添加逻辑删除的过滤条件,例如 deleted=0
,这是为了在查询时自动过滤掉被逻辑删除的数据。如果你希望在某个 LEFT JOIN 查询中去掉这个自动添加的条件,可以通过以下方式实现:
-
全局配置关闭:如果你不希望Mybatis Plus在任何查询中自动添加逻辑删除的过滤条件,可以在配置类中全局关闭逻辑删除功能。但这种方法会影响所有查询。
@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 不添加逻辑删除插件 //interceptor.addInnerInterceptor(new LogicSqlInjector()); return interceptor; } }
-
使用SQL语句自定义查询:对于特定的LEFT JOIN查询,可以使用
@Select
等注解直接编写SQL语句,这样就可以完全控制查询条件,包括是否包含逻辑删除的过滤。@Mapper public interface YourMapper { @Select("SELECT * FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.table1_id") List<YourResultType> customLeftJoinQuery(); }
-
使用Wrappers自定义条件:如果你仍然想利用Mybatis Plus的Wrapper来构建查询条件,但需要去掉自动添加的
deleted=0
条件,可以通过手动添加一个忽略逻辑删除的Wrapper来实现。但请注意,这种方式并不能直接“去掉”已自动添加的条件,而是通过增加额外条件来达到目的,这在LEFT JOIN场景下可能不太适用或需要更复杂的处理。Wrapper(wrapper -> wrapper.eq("specific_column", value).and(i -> i.ne("deleted", 0) /* 或其他方式来绕过deleted过滤 */))
由于LEFT JOIN查询的特殊性,直接在Mybatis Plus的API层面优雅地去掉自动添加的逻辑删除条件较为困难,推荐使用直接编写SQL(方法2)的方式来精确控制查询条件,以满足特定的查询需求。
4.逻辑删除
#如果使用MP逻辑删除, MPJ默认也会带上逻辑删除
可以通过以下方式关闭逻辑删除
配置文件全局关闭副表逻辑删除(默认开启)
mybatis-plus-join:
#关闭副表逻辑删除 默认开启(true)
sub-table-logic: false
关闭本次查询副表逻辑删除
wrapper.disableSubLogicDel()
关闭本次查询主表逻辑删除
wrapper.disableLogicDel()
#改变逻辑删除条件位置
全局配置副表逻辑删除条件的位置(1.4.4+)
mybatis-plus-join:
#副表逻辑删除条件的位置 支持 where / on
#默认 on (1.4.8+)
#注意:1.4.7.2及之前版本默认为where
logic-del-type: on
本次查询所有副表逻辑删除条件位置为 on 语句(1.4.4+)
wrapper.logicDelToOn()
本次查询所有副表逻辑删除条件位置为 where 语句(1.4.4+)
wrapper.logicDelToWhere()
#自定义逻辑删除位置
如果既需要where又需要on可以关闭附表逻辑删除,自定义条件实现
List<Map<String, Object>> list = userMapper.selectJoinMaps(JoinWrappers.lambda(UserDO.class)
.selectAll(UserDO.class)
//关闭本次查询副表逻辑删除
.disableSubLogicDel()
.leftJoin(AddressDO.class, on -> on
.eq(AddressDO::getUserId, UserDO::getId)
//手动添加 ON 语句逻辑删除
.eq(AddressDO::getDel, "未删除标识"))
//手动添加 where 语句逻辑删除
.eq(UserDO::getDel, "未删除标识"));
注:配置完添加依赖
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.2</version>
</dependency>