mybatis-plus逻辑删除使用、示例、配置

1、两种配置方法

第一种在yml文件配置(推荐)

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDelete #默认deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
      id-type: auto

 全局配置就行,并且删除是固定的字段:isDelete,方便开发

第二种在实体类中配置(不推荐)

可以直接加上@TableLogic注解就行,会自动获取全局默认配置,加上(value = "1",delval = "0")只是为了演示更加全面

@Data
@EqualsAndHashCode(callSuper = false)
public class User extends Model<User> {
。。。
    /**
     * 1删除0正常
     */
    @TableLogic(value = "1",delval = "0")
    private Integer isDelete;
。。。
}

2、代码使用示例

 

    @Test
    public void testDelete() {
        userMapper.deleteById(1);
    }

打印的sql不再是删除,而是更新

UPDATE user SET is_delete=1 WHERE id=? AND is_delete=0

使用逻辑删除之后的查询

查询,和修改只能找到逻辑未删除的数据,相当于帮助我们自动过滤了,查询会自动加上where deleted =0

 

    @Test
    public void testDelete() {
//        userMapper.deleteById(1);
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }

查询打印的sql,多了is_delete=0

==>  Preparing: SELECT id,name,age,email,parent_id,create_time,is_delete FROM user WHERE is_delete=0
==> Parameters: 
<==    Columns: id, name, age, email, parent_id, create_time, is_delete
<==        Row: 2, 靖王, 25, jin@qq.com, 1, 2019-02-05 11:12:22, 0
<==        Row: 3, 夏首尊, 28, xia@qq.com, 2, 2019-02-14 08:31:16, 0
<==        Row: 4, 飞流, 31, fl@qq.com, 2, 2019-01-14 09:15:15, 0
<==        Row: 5, 郡主, 32, jz@qq.com, 2, 2019-01-14 09:48:16, 0
<==        Row: 10, 诸葛亮, 11, zgl@qq.com, 1, 2021-01-15 18:27:37, 0
<==        Row: 11, 诸葛亮, 11, zgl@qq.com, 1, 2021-01-15 18:28:14, 0
<==      Total: 6

3、排除标识字段和注意事项

排除逻辑删除标识

在实体User.java加上@TableFiled,就不会加上deleted = 0

    /**
     * 1删除0正常
     */
    @TableField(select = false)
    private Integer isDelete;

 

问题二:自定义的sql语句会直接查询出逻辑删除的数据

有如下自定义查询:

@Mapper
@Component
public interface UserMapper extends BaseMapper<User> {
    /**
     * 自定义查询
     *
     * @param wrapper Wrapper
     * @return List<User>
     */
    @Select("select * from user ${ew.customSqlSegment}")
    List<User> mySelect(@Param(Constants.WRAPPER) Wrapper<User> wrapper);

}

 

会查询出逻辑删除的数据,sql如下,没有加上逻辑删除

==>  Preparing: select * from user
==> Parameters: 
<==    Columns: id, name, age, email, parent_id, create_time, is_delete
<==        Row: 1, 梅长苏, 30, mei@qq.com, null, 2019-01-11 14:20:20, 1
<==        Row: 2, 靖王, 25, jin@qq.com, 1, 2019-02-05 11:12:22, 0
<==        Row: 3, 夏首尊, 28, xia@qq.com, 2, 2019-02-14 08:31:16, 0
<==        Row: 4, 飞流, 31, fl@qq.com, 2, 2019-01-14 09:15:15, 0
<==        Row: 5, 郡主, 32, jz@qq.com, 2, 2019-01-14 09:48:16, 0
<==        Row: 10, 诸葛亮, 11, zgl@qq.com, 1, 2021-01-15 18:27:37, 0
<==        Row: 11, 诸葛亮, 11, zgl@qq.com, 1, 2021-01-15 18:28:14, 0
<==      Total: 7

解决方法

 

解决1

    @Test
    public void testDelete() {
        List<User> users = userMapper.mySelect(Wrappers.<User>lambdaQuery().eq(User::getIsDelete,0));
        System.out.println(users);
    }

解决2:

    <select id="mySelect">
        select * from user WHERE is_delete=0
    </select>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MyBatis-Plus是一个基于MyBatis的增强工具,提供了很多便捷的功能来简化开发。使用MyBatis-Plus可以减少大量的重复SQL代码,提高开发效率。 MyBatis-Plus使用可以从以下几个方面来介绍: 1. 核心功能:MyBatis-Plus提供了一系列的注解和接口来简化CRUD操作。例如,通过注解@TableField可以实现实体类属性名和表字段名的映射;通过注解@TableLogic可以实现逻辑删除功能;通过条件构造器(wrapper)可以快速构建查询条件;通过常用接口可以简化单表操作等。 2. 快速开始示例MyBatis-Plus提供了多个快速开始示例,包括mybatis-plus-sample-quickstart和mybatis-plus-sample-quickstart-springmvc等。这些示例可以帮助你快速上手并了解MyBatis-Plus的基本用法。 3. 属性名和字段名不一致的情况:如果实体类中的属性名和表中的字段名不一致,可以通过注解@TableField来显式指定属性对应的字段名,或者使用驼峰命名规则自动转换。 4. 逻辑删除MyBatis-Plus提供了逻辑删除的功能,可以通过注解@TableLogic和在数据库中设置逻辑删除状态列来实现逻辑删除操作。逻辑删除不会真正删除数据,而是将对应字段的状态修改为“被删除状态”,可以实现数据恢复的功能。 5. 条件构造器和常用接口:MyBatis-Plus提供了条件构造器(wrapper)和一些常用接口,例如QueryWrapper、UpdateWrapper、LambdaQueryWrapper等,可以方便地构建复杂的查询条件和更新操作。 以上是关于MyBatis-Plus的简要介绍和使用方法,希望对你有帮助。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值