首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MyBatis 逆向工程導出失敗:Decimal 型別導致無法生成實體類

     編輯:程式設計疑難解答

現象

MySQL 表中某欄位型別為 DECIMAL,MyBatis Generator 逆向工程導出實體類失敗;將該欄位改為 INT 後即可正常導出。

原因分析

  • 資料表中已存在 DECIMAL 資料,且精度/標度超出 Java BigDecimal 預設映射範圍,或資料包含非數值字符(如 NULL、空字串)導致類型解析異常。
  • Generator 版本較舊(< 1.3.2),對 DECIMAL/NUMERIC 的 JDBC 型別碼處理有已知 Bug。
  • 配置文件 <columnOverride> 未正確指定 javaType,導致預設映射衝突。

解決方案

  1. 升級 Generator 版本:使用 1.4.0+,修復多數型別映射問題。
  2. 在配置中強制指定映射:
    <table tableName="your_table">
      <columnOverride column="decimal_col" javaType="java.math.BigDecimal" jdbcType="DECIMAL" />
    </table>
  3. 清理髒資料:UPDATE your_table SET decimal_col = NULL WHERE decimal_col NOT REGEXP '^[0-9]+(\.[0-9]+)?$';
  4. 若欄位確為整數:執行 ALTER TABLE your_table MODIFY decimal_col INT; 並同步更新實體類型為 Integer 或 Long。

最佳實踐

  • 金額、匯率等精確計算欄位**堅持使用 DECIMAL**,避免浮點誤差。
  • Generator 配置版本控制納入專案,團隊統一版本避免「我機器正常、CI 失敗」。
  • 導出前先用 SELECT column_name, data_type, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_name='your_table'; 核對型別元數據。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved