<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ![](https://cdn.zimug.com/wx-zimug.png) 本文為Mybatis Plus系列文章的第8篇,前7篇訪問地址如下: * [小書MybatisPlus第1篇-整合SpringBoot快速開始增刪改查](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac1%e7%af%87-%e6%95%b4%e5%90%88springboot%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b%e5%a2%9e%e5%88%a0%e6%94%b9%e6%9f%a5/.html) * [小書MybatisPlus第2篇-條件構造器的應用及總結](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac2%e7%af%87-%e6%9d%a1%e4%bb%b6%e6%9e%84%e9%80%a0%e5%99%a8%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%8a%e6%80%bb%e7%bb%93/.html) * [小書MybatisPlus第3篇-自定義SQL](http://www.zimug.com/other/java/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac3%e7%af%87-%e8%87%aa%e5%ae%9a%e4%b9%89sql/.html) * [小書MybatisPlus第4篇-表格分頁與下拉分頁查詢](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac3%e7%af%87-%e8%a1%a8%e6%a0%bc%e5%88%86%e9%a1%b5%e4%b8%8e%e4%b8%8b%e6%8b%89%e5%88%86%e9%a1%b5%e6%9f%a5%e8%af%a2/.html) * [小書MybatisPlus第5篇-Active Record模式精講](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac5%e7%af%87-active-record%e6%a8%a1%e5%bc%8f%e7%b2%be%e8%ae%b2/.html) * [小書MybatisPlus第6篇-主鍵生成策略精講](http://www.zimug.com/other/springboot/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac6%e7%af%87-%e4%b8%bb%e9%94%ae%e7%94%9f%e6%88%90%e7%ad%96%e7%95%a5%e7%b2%be%e8%ae%b2/.html) * [小書MybatisPlus第7篇-代碼生成器的原理精講及使用方法](http://www.zimug.com/other/java/%e5%b0%8f%e4%b9%a6mybatisplus%e7%ac%ac7%e7%af%87-%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90%e5%99%a8%e7%9a%84%e5%8e%9f%e7%90%86%e7%b2%be%e8%ae%b2%e5%8f%8a%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95/.html) ## 一、物理刪除與邏輯刪除 * 物理刪除:指文件存儲所用到的磁存儲區域被真正的擦除或清零,這樣刪除的文件是不可以恢復的,物理刪除是計算機處理數據時的一個概念。如果在數據庫中直接使用delete、drop刪除了表數據,如果沒有備份的話,數據就很難恢復了。 * 邏輯刪除(軟刪除):邏輯刪除就是對要被刪除的數據打上一個刪除標記,通常使用一個deleted字段標示行記錄是不是被刪除,比如該數據有一個字段deleted,當其值為0表示未刪除,值為1表示刪除。那么邏輯刪除就是將0變成1。在邏輯上是數據是被刪除的,但數據本身是依然存在的。 兩者的優劣: * 物理刪除一定程度上刪除了“無用”的數據,降低了表的數據量,對性能肯定是有好處的;但是如果沒有備份的話,數據很難恢復。也無法對歷史數據進行數據分析。 * 邏輯刪除恢復的話只要修改ideleted等類似的狀態標示字段就可以了,但是表的數據量肯定會比物理刪除增加了,并且查詢時經常要考慮到deleted字段,對索引都會有影響。 所以一張表的數據是否采用邏輯刪除,還要根據數據的重要性、數據量、查詢性能以及業務需求等因素綜合判斷。 ## 二、邏輯刪除實現 * 首先為需要邏輯刪除的表增加一個deleted字段作為邏輯刪除字段,并且設置其默認值為0,如下: ~~~ CREATE TABLE `user` ( `id` BIGINT(20) NOT NULL COMMENT '主鍵ID', `name` VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', `age` INT(11) NULL DEFAULT NULL COMMENT '年齡', `email` VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱', `deleted` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '邏輯刪除標記', PRIMARY KEY (`id`) ); ~~~ * 給數據庫表對應的實體類字段上加上@TableLogic注解: ![](https://img.kancloud.cn/cd/a4/cda4c8856e6175dbdfbe0d2ec3c269fc_1056x413.png) ## 三、API使用方法 ### 3.1.插入一條數據 插入數據的時候,不需要為deleted字段賦值 ~~~ @Test public void testInsert() { User user = new User(); user.setName("字母哥"); user.setAge(18); int row = userMapper.insert(user); } ~~~ deleted采用默認值0(未刪除),新插入的數據都是未刪除的數據 ![](https://img.kancloud.cn/1a/8a/1a8a56b6ad4f7646deb2d5eaafe892f1_568x143.png) ### 3.2.刪除一條記錄: 執行如下Mybatis Plus API刪除操作 ~~~ userMapper.deleteById(1286797255805796354L); ~~~ ![](https://img.kancloud.cn/ba/de/badea951813687cf485c8f73101a2acb_504x133.png) 查看數據庫可以發現這條數據仍然存在,只不過邏輯刪除字段值被設置為1: ~~~ UPDATE user SET deleted=1 WHERE id=? AND deleted=0 ~~~ ### 3.3.查詢一條記錄 * 當我們使用MP邏輯刪除的功能之后,比如執行查詢、修改的方法,MP會為我們自動加上未刪除的條件。 是不會查到被邏輯刪除的記錄: ~~~ userMapper.selectList(null); ~~~ 會自動添加過濾條件`WHERE deleted=0 ` ~~~ SELECT id,name,age,email,deleted FROM user WHERE deleted=0 ~~~ * 當我們查詢數據時,查詢結果不希望包含邏輯刪除字段,可以加如下的注解 ~~~ @TableLogic @TableField(select = false) private Integer deleted; ~~~ 執行的SQL如下(注意查詢結果不包含deleted字段): ~~~ SELECT id,name,age,email FROM user WHERE deleted=0 ~~~ ## 四、全局配置參數 通常在一個比較正規的管理項目中,邏輯刪除字段不允許隨意命名,所有表的邏輯刪除字段使用相同的名稱(比如:deleted)。我們可以在application.yml中添加全局配置,這樣就不需要在每一個實體類上面都添加?@TableLogic注解了: > 注意:當全局配置和`@TableLogic`局部配置同時存在,則以實體上注解為準,優先級更高。 ~~~ #全局邏輯刪除字段值 mybatis-plus: global-config: db-config: logic-delete-field: deleted ~~~ 默認情況下,邏輯已刪除值為1,邏輯未刪除值為0。我們也可以在application.yml中進行修改: ~~~ #邏輯已刪除值(默認為 1) #邏輯未刪除值(默認為 0) mybatis-plus: global-config: db-config: logic-delete-value: 1 logic-not-delete-value: 0 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看