Mybatis-Plus邏輯洗掉
邏輯洗掉
物理洗掉∶從資料庫中直接移除
邏輯洗掉︰再資料庫中沒有被移除,而是通過一個變數來讓他失效! deleted =0 => deleted = 1
管理員可以查看被洗掉的記錄!防止資料的丟失,類似于回收站!
1、在資料庫中添加deleted欄位
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Z30ZLVA5-1633440534749)(…/…/TyporaImages/image-20211005210904161.png)]
2、匯入依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2、撰寫組態檔.YML
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/mybatis
driver-class-name: com.mysql.jdbc.Driver
#配置日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#配置邏輯洗掉
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
3、撰寫持久類
@Data
@AllArgsConstructor
@NoArgsConstructor
public class user implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@Version//樂觀鎖注解
private Integer version;
@TableLogic//邏輯洗掉
private Integer deleted;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
4、撰寫mapper類
@Repository
public interface mapper extends BaseMapper <user> {
}
5、撰寫config配置類
//掃描mapper包
@MapperScan("com.xys.Mapper")
@EnableTransactionManagement
@Configuration//配置類
public class MybatisConfig {
//注冊樂觀鎖插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
//分頁插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
//邏輯洗掉組件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
}
6、撰寫handle類
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入時的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert info....");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//更新時的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update info....");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
7、測驗類
//根據Id洗掉
@Test
void delById(){
mapper.deleteById(7L);
}
//批量洗掉
@Test
void delByList(){
mapper.deleteBatchIds(Arrays.asList(6L,5L));
}
//根據map洗掉
@Test
void delByMap(){
HashMap<String,Object> map=new HashMap<>();
//自定義要查詢
map.put("name","c");
mapper.deleteByMap(map);
}
8、測驗結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PwWfuNX7-1633440534753)(…/…/TyporaImages/image-20211005211856448.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1RxbnsS3-1633440534758)(…/…/TyporaImages/image-20211005211919283.png)]
9、再次查詢的時候
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68699afc] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1126074033 wrapping com.mysql.cj.jdbc.ConnectionImpl@35c4e864] will not be managed by Spring
==> Preparing: SELECT id,name,age,email,version,deleted,create_time,update_time FROM user WHERE id=? AND deleted=0
==> Parameters: 7(Long)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68699afc]
但資料庫依然存在資料
ameters: 7(Long)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68699afc]
<font color='red'>但資料庫依然存在資料</font>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306103.html
標籤:其他
