解决mybastis-plus加入逻辑删除SQL语句自动拼接未删除的问题

news/2024/7/7 1:39:13 标签: sql, java

配置逻辑删除

bootstrap.yaml中加入逻辑删除配置

java">mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDeleted  # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: true # 逻辑已删除值(默认为 1)
      logic-not-delete-value: false # 逻辑未删除值(默认为 0)

以及在对应的实体类继承public class Entity extends MyBatisPlusBaseModel<Entity>后就实现了逻辑删除,这时候使用mybatis-plus进行CRUD会自动带上isDelete = false。如果这时候我就是要查那些被删除的记录,虽然这种情况比较少见,不过有些时候可能确实有这种需求。

使用 Wrapper 自定义 SQL

通过尝试发现使用使用 Wrapper 自定义 SQL不会带上isDelete = false

  • 版本要求:确保你的项目中使用的 mybatis-plus 版本至少为 3.0.7,以支持自定义 SQL 功能。
  • 参数命名:在自定义 SQL 时,传递 Wrapper 对象作为参数时,参数名必须为 ew,或者使用注解 @Param(Constants.WRAPPER) 明确指定参数为 Wrapper 对象。
  • 使用 ${ew.customSqlSegment}:在 SQL 语句中,使用 ${ew.customSqlSegment} 来引用 Wrapper 对象生成的 SQL 片段。
  • 不支持基于 entity 的 where 语句:自定义 SQL 时,Wrapper 对象不会基于实体类自动生成 where 子句,你需要手动编写完整的 SQL 语句。

wrapper只能进行条件查询,也就是说不能筛选select的字段,默认是select * from table

example

在Entity的Mapper中加入自定义的SQL

java">import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user ${ew.customSqlSegment}")
    List<User> selectByCustomSql(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

特别注意的是如果Entity中有有json转化的话得加@result

java">import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT * FROM user ${ew.customSqlSegment}")
    @Results({
            @Result(column = "extra_info", property = "extraInfo", typeHandler = FastjsonTypeHandler.class)
    })
    List<User> selectByCustomSql(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

使用方法

java">@Resource
private UserMapper userMapper;


QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");

List<User> userList = userMapper.selectByCustomSql(queryWrapper);

sql" rel="nofollow">使用 Wrapper 自定义 SQL


http://www.niftyadmin.cn/n/5534702.html

相关文章

动态规划解决0/1背包问题详解

一、引言 在日常生活中,我们经常面临各种选择和决策。有些决策涉及到资源的有限性和选择的最优性,这就需要我们运用一些算法来帮助我们做出最佳的选择。0/1背包问题就是这样一个经典的优化问题,它要求我们在给定的背包容量和物品集合中,选择出总价值最大的物品组合。本文将…

mac上挂载linux目录

在 macOS 上挂载 CentOS 目录步骤&#xff1a; 在挂载前确保 macOS 和 CentOS 在同一个局域网内&#xff0c;并且可以相互访问。如果有网络配置问题&#xff0c;可能会导致挂载失败或连接被拒绝的错误。 要在 macOS 上将 CentOS 的 /disk2/go 目录通过 NFS 挂载到 /Users/zon…

以品质为初心,以创新为驱动,光明乳业闪耀第十五届中国奶业大会

2024年7月3日&#xff0c;以“数智赋能引领产业发展增长点&#xff0c;科技创新驱动奶业新质生产力”为主题的中国奶业协会第十五届奶业大会奶业20强&#xff08;D20&#xff09;论坛暨2024中国奶业展览会隆重召开&#xff0c;光明乳业党委书记、董事长黄黎明受邀出席会议&…

设计模式(实战项目)-状态模式

需求背景&#xff1a;存在状态流转的预约单 一.数据库设计 CREATE TABLE appointment (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,appoint_type int(11) NOT NULL COMMENT 预约类型(0:线下查房...),appoint_user_id bigint(20) NOT NULL COMMENT 预约人…

RabbitMQ消息可靠性等机制详解(精细版三)

目录 七 RabbitMQ的其他操作 7.1 消息的可靠性(发送可靠) 7.1.1 confim机制(保证发送可靠) 7.1.2 Return机制(保证发送可靠) 7.1.3 编写配置文件 7.1.4 开启Confirm和Return 7.2 手动Ack(保证接收可靠) 7.2.1 添加配置文件 7.2.2 手动ack 7.3 避免消息重复消费 7.3.…

不同类型uORF对mORF翻译效率的影响

在您提供的文献《不同类型的uORF在真核生物基因表达中的调控潜力》中&#xff0c;对于不同类型的起始密码子的uORF及其对下游主开放阅读框&#xff08;mORF&#xff09;翻译效率的影响进行了详细的讨论。以下是这些影响的主要总结&#xff1a; uORF的起始密码子类型&#xff1a…

自动化测试用例设计-软件测试在软件开发周期中的角色

软件测试在软件开发周期中的角色 在当今快速迭代的软件开发环境中&#xff0c;确保产品质量不仅是技术上的挑战&#xff0c;更是企业竞争力的关键。软件测试作为软件开发生命周期(SDLC)中不可或缺的一环&#xff0c;其重要性不言而喻。本文将深入探讨测试在各个阶段的角色&…

基于golang的文章信息抓取

基于golang的文章信息抓取 学习golang爬虫&#xff0c;实现广度爬取&#xff0c;抓取特定的网页地址&#xff1a;测试站点新笔趣阁&#xff08;https://www.xsbiquge.com/&#xff09; 主要学习golang的goroutine和channel之间的协作&#xff0c;无限爬取站点小说的地址仅限书目…