MyBatis如何做數據清洗

2020-10-17 語霖

前言

系統升級後,原來的資料庫結構及業務邏輯發生了變化,升級後的系統需要兼容歷史數據,此時就需要對歷史數據進行清洗。歷史數據的清洗方式可以分為兩種:

  • 使用SQL腳本開發清洗邏輯
  • 使用Java開發清洗邏輯,通過接口執行

通常,產品化的應用系統在做升級處理時,都是選擇SQL腳本的方式進行清洗數據的。
企業內部,對於線上運行的項目,使用SQL腳本對數據進行變更都需要經過工單系統,流程相對複雜。此時將清洗邏輯直接使用編碼的方式在系統中實現是相對比較簡單的。

使用MyBatis

在使用MyBatis做數據清洗時,遇到了一個問題,那就是清洗後的數據無法指定主鍵即id的值,新寫入的數據主鍵值被數據自增ID替換掉了。

/** * 自增主鍵 */@TableId(value = "id", type = IdType.AUTO)private Long id;

問題就出現在@TableId註解上。
@TableId是MyBatis-Plus提供的註解,@TableId註解代碼如下:

@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public@interface TableId { /** * <p> * 欄位值(駝峰命名方式,該值可無) * </p> */ String value() default ""; /** * <p> * 主鍵ID * </p> * {@link IdType} */ IdType type() default IdType.NONE;}

可以看到IdType是用來表示主鍵的創建方式的。

publicenum IdType { AUTO(0, "資料庫ID自增"), INPUT(1, "用戶輸入ID"), /* 以下2種類型、只有當插入對象ID 為空,才自動填充。*/ ID_WORKER(2, "全局唯一ID"), UUID(3, "全局唯一ID"), NONE(4, "該類型為未設置主鍵類型"), ID_WORKER_STR(5, "字符串全局唯一ID"); ...}

IdType中定義了多種id生成方式。可以看AUTO的創建方式是使用資料庫ID自增,此時在執行插入操作時,MyBatis-Plus會對實體模型中的id欄位清除掉,再執行插入。
INPUT方式在實行插入時候,不會對ID主鍵進行處理,如果用戶設置了ID,將會把該值直接插入。
所以在使用編碼方式對數據進行清洗時,還需要修改模型的ID上的@TableId@TableId(value = "id", type = IdType.AUTO)

總結

不同的洗數方案,都有各自的優勢,在選擇方案時,還需要結合外部的環境進行全面考慮。

相關焦點

  • Mybatis中別名、插件與數據源配置
    可以看到它底層數據結構是一個map,並且初始化的時候已經把常見的別名設置到map中了,在前面講到的Configuration的初始化時,也設置了很多比如JDBC、POOLED、SLF4J、LOG4J等。
  • Spring boot整合mybatis多數據源簡單使用
    日常開發中,我們很少會在一個應用程式中同時使用多個數據源。但是,如果涉及一些數據遷移等應用,可能會涉及將數據從一個庫遷移到另外一個庫,甚至是不同類型的資料庫,比如MySQL到Oracle。這篇博文,我們不介紹mybatis的基本使用,只介紹基於mybatis配置多數據源的方法。
  • 詳解mybatis和Mybatis-Plus區別
    區別二Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變。我們在使用Mybatis-Plus之後既可以使用Mybatis-Plus的特有功能,又能夠正常使用Mybatis的原生功能。
  • mybatis-plus思維導圖,讓mybatis-plus不再難懂
    mybatis-plus而mybatis-plus這樣一個框架,一種集mybatis與hibernate的優點一起的框架。它提供了hibernate的單表CRUD操作的方便同時,又保留了mybatis的特性。
  • MyBatis初級實戰之四:druid多數據源
    本文是《mybatis初級實戰》系列的第四篇,一個springboot應用同時操作兩個資料庫的場景,在平時也會遇到,今天要實戰的就是通過druid配置兩個數據源,讓一個springboot應用同時使用這兩個數據源;
  • 理解 MyBatis 是如何在 Spring 容器中初始化的
    當遇到 MyBatis 初始化失敗時,如何正確的找到分析問題的切入點?本文將針對這些問題進行介紹。本文基於 MyBatis 3 和 Spring ,假設讀者已經知道如何使用 Maven 和 MyBatis,以及了解 Spring 的容器機制。
  • mybatis plus 與mybatis的選擇
    mybatis plus是mybatis的封裝,可以做到簡化xml的效果,完全去除xml化,實現orm層的分離,mybatis雖然是hrbernate後的另一大框架,同時其xml的配置也隨著去xml配置時代的而成為阻礙敏捷開發的標準.隨著mybatis plus的出現,orm的框架又將有一次提升
  • 如何優雅地本地化構建Mybatis源碼?
    下載mybatis源碼:https://github.com/mybatis/mybatis-3下載mybatis依賴項目parent:https://github.com/mybatis/parent二.
  • mybatis升級為mybatis-plus踩到的坑
    前言最近使用RuoYi-Vue來做後臺管理腳手架。RuoYi-Vue 是一個 Java EE 企業級快速開發平臺,基於經典技術組合(Spring Boot、Spring Security、mybatis、Jwt、Vue),內置模塊如:部門管理、角色用戶、菜單及按鈕授權、數據權限、系統參數、日誌管理、代碼生成等。
  • SpringBoot實戰(三):Mybatis配置多數據源
    【前言】 最近接到一個新需求,經過分析後做了相應的設計;其中需要在一個項目中操做不同的數據源;於是進行了相關驗證;在此記錄一下驗證過程。【實戰多數據源】 一、Pom中引入相應的Jar包<!-- mybatis --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&
  • 1.什麼是mybatis
    如何獲取Mybatismaven倉庫:<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version></dependency>Github:https://github.com/mybatis/mybatis-3/releases
  • Mybatis-Plus和Mybatis你了解多少呢?
    自動生成Entity、Mapper、Service、Controller等總結:資料庫框架:Mybatis Plus > Mybatis代碼生成器:Mybatis Plus Generator > Mybatis Generator區別二Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強
  • 如何讓 Mybatis 自動生成代碼,提高開發效率
    這種重複性的工作, 我們當然不希望做那麼多。  還好,mybatis為我們提供了強大的代碼生成--MybatisGenerator。  通過簡單的配置, 我們就可以生成各種類型的實體類, Mapper接口, MapperXML文件, Example對象等。
  • mybatis第二天:快速入門數據持久層框架mybatis
    這是因為mybatis會把接收到的參數,以鍵值對的形式存儲在map中,比如QueryVo類中屬性為鍵,然後值為屬性的值。所以我們可以直接使用idsList來獲取對應的列表。如果傳遞過來一個數組,mybatis將以Array為鍵存儲在map中,如果傳遞過來的是一個list,mybatis會以list為鍵存儲在map中第二種情況:<select id=&34; parameterType=&34; resultType=&34;> <include refid=&34;/> <
  • 集成Redis、mybatis、springboot
    寫配置spring: #redis 的配置 redis: host: localhost port: 6379 database: 0# 數據源characterEncoding=UTF-8 druid: stat-view-servlet: url-pattern: /druid/* login-password: 123456 login-username: admin#mybatis 的配置mybatis: mapper-locations: classpath:/mapper/*.xml# 配置日誌列印
  • 從零開始手寫 mybatis(四)- mybatis 事務管理機制詳解
    第二節 從零開始手寫 mybatis(二)mybatis interceptor 插件機制詳解第三節 從零開始手寫 mybatis(三)jdbc pool 從零實現資料庫連接池本節我們一起來學習一下 mybatis 中的事務管理。
  • mybatis的Configuration詳解
    上一篇介紹了mybatis中SqlSessionFactory的創建過程,今天來學習它默認實現中的唯一屬性Configuration。利用mybatis查出數據只用三步:創建SqlSessionFactory、通過SqlSessionFactory創建SqlSession、SqlSession執行selectOne方法。
  • 用mybatis-plus不會使用樂觀鎖,處理重要數據容易出錯
    如果是悲觀鎖,小李取出數據後,小王只能等小李操作完之後,才能對價格進行操作,也會保證最終的價格是120元。接下來小編將介紹如何在mybatis-plus項目中,添加樂觀鎖。3 創建項目先創建一個集成了mybatis-plus的spring boot項目。參考小編的另一篇文章【基於Spring Boot整合mybatis-plus完整詳細版經驗分享一】。
  • Mybatis頻率最高的面試題及答案
    mybatis是一個優秀的基於Java持久層框架,內部它是封裝了JDBC,讓開發者不用過多的關心什麼創建連接、加載驅動啊等等。如今大企業越來越多用mybatis,為什麼它越來越被廣泛應用,以前流行的SSH框架開發,而現在完全勢向於SSM框架開發,今天講解mybatis框架常見面試題。
  • SpringBoot+Mybatis+druid 多數據源配置
    mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version