这个mybatis的@Select自己写sql还会被侵入怎么办?

这种mapper里自己写的sql,我以为mybatis-plus不会侵入了,谁知还是被侵入了,运行时自动给我添加了个条件

@Mapper
public interface MyMapper extends BaseMapperX<AdminUserDO> {
    @Select({"select * from system_users where 1=1 and deleted = 0 and username = #{username} limit 1"})
    List<AdminUserDO> getUser(@Param("username") String username);
}

image.png
请问大佬们,mybatis-pluse 下 怎么做自己的sql才不会被侵入

阅读 862
2 个回答
✓ 已被采纳

MyBatis-Plus通常不会侵入自定义SQL语句,但在某些情况下,可能会进行一些自动化的处理。如果你希望完全掌控自己的SQL语句,可以尝试以下方法:

使用@SelectProvider注解:
你可以使用@SelectProvider注解来指定自己的SQL提供器类,以便完全自定义SQL语句。首先,创建一个SQL提供器类,然后在提供器类中构建你的SQL语句。然后在Mapper接口方法上使用@SelectProvider注解引用提供器类。这样可以避免MyBatis-Plus对SQL的干预。

创建SQL提供器类:

public class MyCustomSqlProvider {
    public String getUserSql(String username) {
        return "select * from system_users where username = #{username} limit 1";
    }
}

在Mapper接口中使用@SelectProvider注解:

@Mapper
public interface MyMapper extends BaseMapperX<AdminUserDO> {
    @SelectProvider(type = MyCustomSqlProvider.class, method = "getUserSql")
    List<AdminUserDO> getUser(@Param("username") String username);
}
@Mapper
public interface MyMapper extends BaseMapperX<AdminUserDO> {
    @SqlParser(filter = true)
    @Select({"select * from system_users where 1=1 and deleted = 0 and username = #{username} limit 1"})
    List<AdminUserDO> getUser(@Param("username") String username);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进