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>