Mybatis Plus 在进行多表查询时,默认会添加逻辑删除的过滤条件,例如 deleted=0
,这是为了在查询时自动过滤掉被逻辑删除的数据。如果你希望在某个 LEFT JOIN 查询中去掉这个自动添加的条件,可以通过以下方式实现:
-
全局配置关闭:如果你不希望Mybatis Plus在任何查询中自动添加逻辑删除的过滤条件,可以在配置类中全局关闭逻辑删除功能。但这种方法会影响所有查询。
@Configuration public class MybatisPlusConfig {@Beanpublic 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)的方式来精确控制查询条件,以满足特定的查询需求。