mybatis用map接收返回對象,不想讓數據類型為tinyint自動轉換為boolean,如何處理

在 MyBatis 中,當使用?Map?來接收查詢結果時,MyBatis 會根據列的數據類型自動選擇合適的 Java 類型來映射這些值。默認情況下,如果數據庫列是?TINYINT(1),MyBatis 可能會錯誤地將其映射為?boolean,因為它經常被誤解為只能存儲 0 或 1,并且用于表示真/假值。然而,正如前面提到的,TINYINT?實際上是一個整數類型,應該映射為?Integer

為了避免?TINYINT?被自動轉換為?boolean,你可以采取以下措施:

1. 使用?resultType?指定結果類型

如果你正在使用注解來配置你的 Mapper 接口,你可以使用?@Select?注解,并指定?resultType?為?Map<String, Object>。這將確保 MyBatis 不會嘗試對?TINYINT?進行特殊的布爾類型映射。

 
java@Select("SELECT * FROM your_table WHERE id = #{id}")
Map<String, Object> selectById(int id);

2. 使用?resultMap?并明確指定?javaType

如果你使用的是 XML 配置文件,你可以創建一個?resultMap,并在其中明確指定?TINYINT?列應該映射為?java.lang.Integer?類型。

 
xml<resultMap id="yourResultMap" type="java.util.HashMap">
<result column="your_tinyint_column" property="yourTinyIntColumn" javaType="java.lang.Integer"/>
<!-- 其他 result 配置 -->
</resultMap><select id="selectById" resultMap="yourResultMap">
SELECT * FROM your_table WHERE id = #{id}
</select>

在這個配置中,javaType="java.lang.Integer"?明確告訴 MyBatis 將?your_tinyint_column?列映射為?Integer?類型。

3. 使用?typeHandler

如果上述方法仍然不能解決問題,你可以考慮自定義一個?TypeHandler?來處理?TINYINT?到?Integer?的映射。盡管這通常用于更復雜的類型轉換場景,但它也可以用于覆蓋 MyBatis 的默認行為。

 
javapublic class TinyIntTypeHandler extends BaseTypeHandler<Integer> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter);
}@Override
public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getInt(columnName);
}@Override
public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getInt(columnIndex);
}@Override
public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getInt(columnIndex);
}
}

然后,在你的 MyBatis 配置文件中注冊這個?TypeHandler

 
xml<typeHandlers>
<typeHandler handler="com.yourpackage.TinyIntTypeHandler"/>
</typeHandlers>

或者在 Mapper XML 文件中指定:

 
xml<result column="your_tinyint_column" property="yourTinyIntColumn" typeHandler="com.yourpackage.TinyIntTypeHandler"/>

4. 檢查 MyBatis 版本和數據庫驅動

確保你使用的 MyBatis 版本沒有已知的與此問題相關的 bug。同時,檢查你的數據庫驅動是否是最新版本,有時候驅動的問題也可能導致類型映射不正確。

注意事項

  • 在處理?TINYINT?類型的列時,始終要記得檢查數據庫中的實際數據類型和值,以確保它們符合你的期望。
  • 如果你在多個地方使用?TINYINT,并且希望全局改變其映射行為,使用自定義?TypeHandler?可能是最好的選擇。如果只是偶爾需要改變映射,使用?resultMap?和?javaType?指定可能就足夠了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20205.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PPP認證兩種:PAP和CHAP,兩次握手和三次握手

CHAP&#xff08;Challenge-Handshake Authentication Protocol&#xff0c;質詢握手認證協議&#xff09;的設計理念是增強網絡認證過程的安全性。在CHAP的三次握手過程中&#xff0c;不直接傳送用戶的明文密碼&#xff0c;以此來提高安全性&#xff0c;具體步驟如下&#xff…

開源大模型源代碼

開源大模型的源代碼可以在多個平臺上找到&#xff0c;以下是一些知名的開源大模型及其源代碼的獲取方式&#xff1a; 1. **艾倫人工智能研究所的開放大語言模型&#xff08;Open Language Model&#xff0c;OLMo&#xff09;**&#xff1a; - 提供了完整的模型權重、訓練代…

springboot結合mybatis使用多數據源的方式

背景 最近有一個需求&#xff0c;有兩個庫需要做同步數據&#xff0c;一個Doris庫&#xff0c;一個mysql庫&#xff0c;兩邊的表結構一致&#xff0c;這里不能使用navicat等工具提供的數據傳輸之類的功能&#xff0c;只能使用代碼做同步&#xff0c;springboot配置多數據…

如何設置手機的DNS

DNS 服務器 IP 地址 蘋果 華為 小米 OPPO VIVO DNS 服務器 IP 地址 中國大陸部分地區會被運營商屏蔽網絡導致無法訪問&#xff0c;可修改手機DNS解決。 推薦 阿里的DNS (223.5.5.5&#xff09;或 114 (114.114.114.114和114.114.115.115) 更多公開DNS參考&#xff1a; 蘋果…

ESP32-C3模組上實現藍牙BLE配網功能(1)

本文內容參考&#xff1a; 《ESP32-C3 物聯網工程開發實戰》 樂鑫科技 藍牙的名字由來是怎樣的&#xff1f;為什么不叫它“白牙”&#xff1f; 特此致謝&#xff01; 一、藍牙知識基礎 1. 什么是藍牙&#xff1f; &#xff08;1&#xff09;簡介 藍牙技術是一種無線數據和…

【緩存】OS層面緩存設計機制

操作系統的緩存設計機制是計算機體系結構中的一個重要組成部分&#xff0c;旨在提高系統的性能&#xff0c;特別是通過減少對慢速存儲設備&#xff08;如硬盤&#xff09;的訪問次數來加速數據的讀取和寫入。 以下是一些常見的操作系統緩存設計機制&#xff1a; CPU緩存&…

web學習筆記(六十一)

目錄 如何使用公共組件來編寫頁面 如何使用公共組件來編寫頁面 1.導入公共組件nav.vue import Catenav from "/components/nav.vue"; 2.在頁面插入子組件 如果使用了setup語法糖此時就可以直接在頁面插入 <Catenav ></Catenav>標簽&#xff0c; …

.NET 快速重構概要1

1.封裝集合 在某些場景中,向類的使用者隱藏類中的完整集合是一個很好的做法,比如對集合的 add/remove 操作中包 含其他的相關邏輯時。因此,以可迭代但不直接在集合上進行操作的方式來暴露集合,是個不錯的主意。 public class Order { private int _orderTotal; private Li…

Camunda BPM架構

Camunda BPM既可以單獨作為流程引擎服務存在,也能嵌入到其他java應用中。Camunda BPM的核心流程引擎是一個輕量級的模塊,可以被Spring管理或者加入到自定義的編程模型中,并且支持線程模型。 1,流程引擎架構 流程引擎由多個組件構成,如下所示: API服務 API服務,允許ja…

邏輯回歸分類算法

文章目錄 算法推導 線性回歸解決連續值的回歸預測&#xff1b;而邏輯回歸解決離散值的分類預測&#xff1b; 算法推導 邏輯回歸可以看作是兩部分&#xff0c;以0、1分類問題說明&#xff1b; 線性回歸部分 對于一個樣本 x i x_i xi?&#xff0c;有n個特征 x i ( 1 ) x_i^{(1)…

蒙自源兒童餐新品上市,引領健康美味新潮流

隨著夏日的熱烈與兒童節的歡樂氛圍到來&#xff0c;蒙自源品牌隆重推出兒童餐新品&#xff0c;以“快樂不分大小&#xff0c;誰還不是個寶寶”為主題&#xff0c;為廣大消費者帶來一場健康與美味的盛宴。新品上市活動將于5月25日舉行&#xff0c;蒙自源將以其獨特的產品魅力和創…

install

目錄 1、 install 1.1、 //creates form with validation 1.2、 onStepChanging: function (event, currentIndex, newIndex) { 1.3、 onFinishing: function (event, currentIndex) { 1.4、 //init inst

最新 HUAWEI DevEco Studio 調試技巧

最新 HUAWEI DevEco Studio 調試技巧 前言 在我們使用 HUAWEI DevEco Studio 編輯器開發鴻蒙應用時&#xff0c;免不了要對我們的應用程序進行代碼調試。我們根據實際情況&#xff0c;一般會用到以下三種方式進行代碼調試。 肉眼調試法注釋排錯調試法控制臺輸出法彈出提示法斷…

【算法實戰】每日一題:將某個序列中內的每個元素都設為相同的值的最短次數(差分數組解法,附概念理解以及實戰操作)

題目 將某個序列中內的每個元素都設為相同的值的最短次數 1.差分數組&#xff08;后面的減去前面的值存儲的位置可以理解為中間&#xff09; 差分數組用于處理序列中的區間更新和查詢問題。它存儲序列中相鄰元素之間的差值&#xff0c;而不是直接存儲每個元素的值 怎么對某…

STM32 入門教程(江科大教材)#筆記2

3-4按鍵控制LED /** LED.c**/ #include "stm32f10x.h" // Device headervoid LED_Init(void) {/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIOA的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_I…

關系數據庫:關系運算

文章目錄 關系運算并&#xff08;Union&#xff09;差&#xff08;Difference&#xff09;交&#xff08;Intersection&#xff09;笛卡爾積&#xff08;Extended Cartesian Product&#xff09;投影&#xff08;projection&#xff09;選擇&#xff08;Selection&#xff09;除…

微信小程序中應用van-calendar時加載時間過長,以及設置min-data無效的問題解決

一、我們微信小程序中應用van-calendar時&#xff0c;如果沒有設置min-data&#xff0c;那么頁面的加載時間會非常長&#xff0c;所以&#xff0c;一定一定要配置min-data&#xff1b; 二、vue中min-data的寫法是:min-data“new Date(2023, 0, 1)”&#xff0c;而在小程序中的寫…

docker使用docker logs命令查看容器日志的幾種方式

以下是如何使用docker logs命令的基本示例&#xff1a; docker logs [容器ID或名稱]如果想要實時查看日志&#xff0c;可以加上-f參數&#xff0c;這樣日志就會像使用tail -f命令一樣實時輸出。 docker logs -f [容器ID或名稱]如果只想查看最近幾行的日志&#xff0c;可以使用…

讓表單引擎插上AI的翅膀-記馳騁表單引擎加入AI升級

讓表單引擎插上AI的翅膀 隨著科技的飛速發展&#xff0c;人工智能&#xff08;AI&#xff09;已經逐漸滲透到我們工作和生活的每一個角落。在數字化辦公領域&#xff0c;表單引擎作為數據處理和流程自動化的重要工具&#xff0c;也迎來了與AI技術深度融合的新機遇。讓表單引擎…

Java對象的比較——equals方法,Comparable接口,Comparator接口

Java對象的比較——equals方法&#xff0c;Comparable接口&#xff0c;Comparator接口 1. equals方法2. Comparable接口3. Comparator接口 1. equals方法 在判斷兩個整數是否相同時&#xff0c;我們可以使用以下方式&#xff1a; System.out.println(1 2); System.out.printl…