Mybatis Plus逻辑删除
只对自动注入的sql起效:
- 插入: 不作限制
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 转变为 更新
注:
-
逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
-
如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。
一、局部设置
@TableLogic() private Integer deleted;
二、全局设置
#逻辑删除状态设置 mybatis-plus.global-config.db-config.logic-not-delete-value = 0 mybatis-plus.global-config.db-config.logic-delete-value= = 1
三、测试
RunWith(SpringRunner.class) @SpringBootTest public class LogicTest { @Autowired private UserInfoMapper userInfoMapper; /** * 根据id删除 */ @Test public void deleteById() { int rows = userInfoMapper.deleteById(123455); System.out.println("影响记录数:"+rows); } /** * 获取没有删除的数据 */ @Test public void select() { List<UserInfo> list = userInfoMapper.selectList(null); list.forEach(System.out::println); } /** * 修改没有删除的数据 */ @Test public void updateById() { UserInfo userInfo = new UserInfo(); userInfo.setAge(26); userInfo.setId(12323434); int rows = userInfoMapper.updateById(userInfo); } }
四、查询不取字段
@TableField(select = false) private Integer deleted;
五、自定义查询
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
@Select("select * from user ${ew.customSqlSegment}") List<UserInfo> mySelect(@Param(Constants.WRAPPER) Wrapper<UserInfo> wrapper); /** *自定义查询所有数据 */ @Test public void mySelect() { List<UserInfo> list = userInfoMapper.mySelect(Wrappers.<UserInfo> lambdaQuery().gt(UserInfo::getAge,25)); list.forEach(System.out::println); } /** * 自定义查询没有删除的数据 */ @Test public void mySelect1() { List<UserInfo> list = userInfoMapper.mySelect(Wrappers.<UserInfo> lambdaQuery().gt(UserInfo::getAge,25).eq(UserInfo::getDeleted,0)); list.forEach(System.out::println); }
本文来自博客园,作者:jevan,转载请注明原文链接:https://www.cnblogs.com/DoNetCShap/p/15935597.html