您好,登錄后才能下訂單哦!
這篇文章主要介紹了mybatisplus邏輯刪除如何實現(xiàn)的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇mybatisplus邏輯刪除如何實現(xiàn)文章都會有所收獲,下面我們一起來看看吧。
mybatisplus中邏輯刪除通俗說為了在數(shù)據(jù)庫中保留數(shù)據(jù),但是又不想進(jìn)行其他一些sql語句時有他(剛剛通過邏輯刪除了的)的存在。就是在數(shù)據(jù)庫中添加一字段,通過數(shù)值內(nèi)容來說明那些是指刪除了的即可。
首先數(shù)據(jù)庫中添加對應(yīng)字段(此處通過deleted字段代表邏輯刪除字段,即0為未被刪除,1為已刪除)
1.方法一(單表注解設(shè)置)
在數(shù)據(jù)表對象層中對應(yīng)對類的對應(yīng)字段中通過注解實現(xiàn)(@TableLogic(),這里value和delval就是mp給我們定義的是否刪除的標(biāo)記,數(shù)值由開發(fā)者設(shè)定)
@Data @AllArgsConstructor @NoArgsConstructor public class Book { private Long id; private String type; private String name; private String description; //邏輯刪除(就是在delete字段做標(biāo)記,不是真正意義上的刪除) @TableLogic(value = "0",delval = "1") private Integer deleted; }
2.方法二(全局配置文件設(shè)置)
通過配置實現(xiàn)。這樣實現(xiàn)的就比較全局,沒有指定那個指定數(shù)據(jù)表對象層中對應(yīng)對類的對應(yīng)字段實現(xiàn)邏輯刪除這個功能,只要擁有全局設(shè)置一樣的字段即可。
(這使用springboot框架的application.yml配置為例,其中l(wèi)ogic-delete-field是指要指定字段名,logic-delete-value:是刪除后設(shè)置成的值,logic-not-delete-value是未刪除的值是什么)
# mp日志 mybatis-plus: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0
在測試類中測試并查看數(shù)據(jù)庫對應(yīng)表的對應(yīng)測試數(shù)據(jù)有什么變化。
在此測試中發(fā)現(xiàn),數(shù)據(jù)庫表對應(yīng)的數(shù)據(jù)并沒有真正意義上的刪除,只是在對應(yīng)字段做好了設(shè)定好的標(biāo)記。
而且在其他mp操作此表時并沒有這條數(shù)據(jù)的參與,即實現(xiàn)開發(fā)者想刪除某條數(shù)據(jù),但又想數(shù)據(jù)庫能保留這個數(shù)據(jù)記錄。
1.測試類進(jìn)行邏輯刪除測試代碼
這是通過id實現(xiàn)邏輯刪除
@Autowired private BookDao bookDao; @Test public void deleteById(){ int i = bookDao.deleteById(12L); System.out.println("影響行數(shù)為:"+i+"條"); }
2.刪除后數(shù)據(jù)表對應(yīng)數(shù)據(jù)變化
id為12數(shù)據(jù)對應(yīng)的deleted已經(jīng)變成了1
3.測試其他mp操作是否有對標(biāo)記刪除了的數(shù)據(jù)有“參與”
此處是對上面操作完成后進(jìn)行的mp操作(查詢表中所有數(shù)據(jù)所有)
@Autowired private BookDao bookDao; @Test void findAll() { List<Book> books = bookDao.selectList(null); for (Book book :books) { System.out.println(book); } }
結(jié)果如下(顯然,id為12的數(shù)據(jù)并沒有查詢出來,但是數(shù)據(jù)庫還是存在此條數(shù)據(jù)。)
我這總結(jié)了幾個可能遇到的一些僅僅關(guān)于mp邏輯刪除本身可能出現(xiàn)的問題解決參考(排除一些其他因素,單純講講mp邏輯刪除本身的坑點)
報錯點: Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘deleted’ in ‘where clause’
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column ‘deleted’ in ‘where clause’:
原因解釋就跳過了,解決方法其實就是只要把設(shè)定的刪除字段設(shè)置為“deleted”即可(也多注意邏輯刪除需要添加的數(shù)據(jù)庫字段得用“deleted”命名,不然可能就會報上面這個報錯點了)。
報錯點:就是在多個表使用mp操作的時候,注意一些全局設(shè)置和局部設(shè)置區(qū)別。
例如這篇所說的mp邏輯刪除內(nèi)容,實現(xiàn)有兩個方法,分別是數(shù)據(jù)表對象層中對應(yīng)對類的對應(yīng)字段中通過注解實現(xiàn)@TableLogic()和全局變量配置中設(shè)置。
注意如果設(shè)置成了局部,那么就只是針對設(shè)置了的實現(xiàn),如果設(shè)置了全局,則所有設(shè)置了邏輯刪除字段(deleted)在進(jìn)行mp刪除操作時,都是進(jìn)行邏輯刪除操作。
解決方法就是根據(jù)實際開發(fā)需求,實際操作設(shè)置即可。
關(guān)于“mybatisplus邏輯刪除如何實現(xiàn)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“mybatisplus邏輯刪除如何實現(xiàn)”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。