MyBatis屬性名和字段名不一致的問題解決方法
解決屬性名和字段名不一致的問題
1. 問題
數(shù)據(jù)庫中的字段
新建一個項(xiàng)目,拷貝之前的,測試實(shí)體類字段不一致的情況
測試出現(xiàn)問題
// select * from user where id = #{id} // 類型處理器 // select id,name,pwd from user where id = #{id}
解決方法:
- 起別名:修改sql語句
<select id="getUserById" resultType="com.kuang.pojo.User"> select id,name,pwd as password from USER where id = #{id} </select>
2. resultMap
結(jié)果集映射
id name pwd
id name password
解決簡單的結(jié)果映射名的問題
<!--結(jié)果集映射--> <resultMap id="UserMap" type="User"> <!--column數(shù)據(jù)庫中的字段,property實(shí)體類中的屬性--> <result column="id" property="id"></result> <result column="name" property="name"></result> <result column="pwd" property="password"></result> </resultMap> <select id="getUserList" resultMap="UserMap"> select * from USER </select>
在MyBatis中, 元素用于映射查詢結(jié)果到Java對象。在 中, 元素用于將查詢結(jié)果的列映射到Java對象的屬性。在進(jìn)行映射時,MyBatis會嘗試根據(jù)Java對象屬性的類型和查詢結(jié)果的列的類型進(jìn)行自動轉(zhuǎn)換,但有時需要手動配置映射關(guān)系,以確保類型匹配。
舉例代碼:
<resultMap id="exampleResultMap" type="com.example.domain.User"> <id property="id" column="user_id" /> <result property="username" column="user_name" /> <result property="email" column="user_email" /> <result property="birthDate" column="user_birth_date" /> </resultMap>
在這個例子中:
property
屬性指定了Java對象的屬性名稱。
column
屬性指定了數(shù)據(jù)庫查詢結(jié)果中的列名稱。
MyBatis會根據(jù)屬性和列的名稱進(jìn)行映射,但類型匹配仍然很重要。如果數(shù)據(jù)庫中的列類型與Java對象屬性的類型不匹配,可能會導(dǎo)致類型轉(zhuǎn)換錯誤。在這種情況下,你可能需要手動指定類型轉(zhuǎn)換器。
例如,如果數(shù)據(jù)庫中的列是 VARCHAR 類型,而Java對象的屬性是 java.util.Date 類型,你可能需要使用類型轉(zhuǎn)換器來將字符串轉(zhuǎn)換為日期。可以通過在 元素中添加 javaType 和 jdbcType 屬性來手動指定類型:
<resultMap id="exampleResultMap" type="com.example.domain.User"> <id property="id" column="user_id" /> <result property="username" column="user_name" /> <result property="email" column="user_email" /> <result property="birthDate" column="user_birth_date" javaType="java.util.Date" jdbcType="VARCHAR" /> </resultMap>
在這個例子中,javaType 屬性指定了Java對象屬性的類型,而 jdbcType 屬性指定了數(shù)據(jù)庫列的類型。這有助于確保MyBatis正確進(jìn)行類型轉(zhuǎn)換。
3. javaType和jdbcType的對應(yīng)關(guān)系
當(dāng)你在MyBatis中使用 元素時,可以通過指定 javaType 和 jdbcType 屬性來配置Java對象屬性與數(shù)據(jù)庫列的類型對應(yīng)關(guān)系。以下是一些常見的Java類型與JDBC類型的對應(yīng)關(guān)系:
javaType | jdbcType | |
---|---|---|
String類型 | String | VARCHAR |
Integer類型 | Integer 或int | INTEGER |
Long類型 | Long 或long | BIGINT |
Double類型 | Double 或 double | DOUBLE |
Float類型 | Float 或 float | REAL |
Boolean類型 | Boolean 或 boolean | BIT |
Date類型 | java.util.Date 或 java.sql.Date | DATE |
Timestamp類型 | java.sql.Timestamp | TIMESTAMP |
BigDecimal類型 | java.math.BigDecimal | DECIMAL |
Byte類型 | Byte 或 byte | TINYINT |
4.resultMap和resultType的區(qū)別?
在MyBatis中,resultMap 和 resultType 都用于配置查詢結(jié)果的映射關(guān)系,但它們有一些關(guān)鍵的區(qū)別。
resultType:
resultType 是一種簡化的映射配置方式,用于指定查詢結(jié)果的類型。
你只需要指定一個Java類的全限定名,MyBatis會自動映射查詢結(jié)果到該類的實(shí)例。
resultType 使用簡單,適用于簡單的查詢,但對于復(fù)雜的映射關(guān)系,可能顯得不夠靈活。
示例:
<select id="getUserById" resultType="com.example.domain.User"> SELECT * FROM users WHERE id = #{id} </select>
resultMap:
resultMap 是一種更為靈活和強(qiáng)大的映射配置方式,允許你詳細(xì)定義查詢結(jié)果與Java對象之間的映射關(guān)系。
你可以指定每個查詢結(jié)果列與Java對象屬性的映射關(guān)系,同時還可以配置復(fù)雜的映射關(guān)系,如繼承、關(guān)聯(lián)關(guān)系等。
resultMap 通常用于復(fù)雜的查詢,或者在需要手動配置映射關(guān)系時使用。
示例:
<resultMap id="userResultMap" type="com.example.domain.User"> <id property="id" column="user_id"/> <result property="username" column="user_name"/> <result property="email" column="user_email"/> <!-- 其他映射關(guān)系配置 --> </resultMap>
<select id="getUserById" resultMap="userResultMap"> SELECT * FROM users WHERE id = #{id} </select>
總體而言,resultMap 更加靈活,適用于復(fù)雜的映射需求,而 resultType 則更為簡單,適用于簡單的映射場景。在實(shí)際應(yīng)用中,根據(jù)具體需求選擇使用 resultMap 或 resultType。
- resultMap 元素是 MyBatis 中最重要最強(qiáng)大的元素。
- ResultMap 的設(shè)計(jì)思想是,對簡單的語句做到零配置,對于復(fù)雜一點(diǎn)的語句,只需要描述語句之間的關(guān)系就行了,如上。
- ResultMap 的優(yōu)秀之處——你完全可以不用顯式地配置它們,需要什么,配置什么就好了,如上:需要pwd和password的映射,其它的可以不寫。
如果這個世界總是這么簡單就好了。
以上就是MyBatis屬性名和字段名不一致的問題解決的詳細(xì)內(nèi)容,更多關(guān)于MyBatis屬性名和字段名不一致的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java?ResourceBundle讀取properties文件方式
這篇文章主要介紹了java?ResourceBundle讀取properties文件方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08IDEA2022 提示更新 TKK失敗請檢查網(wǎng)絡(luò)連接的問題
這篇文章主要介紹了IDEA2022 提示:更新 TKK 失敗,請檢查網(wǎng)絡(luò)連接,本文給大家分享解決方案,對idea2022提示更新TKK失敗感興趣的朋友跟隨小編一起看看吧2022-11-11詳細(xì)聊聊SpringBoot中動態(tài)切換數(shù)據(jù)源的方法
在大型分布式項(xiàng)目中,經(jīng)常會出現(xiàn)多數(shù)據(jù)源的情況,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中動態(tài)切換數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09詳解springboot啟動時是如何加載配置文件application.yml文件
這篇文章主要介紹了詳解springboot啟動時是如何加載配置文件application.yml文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06利用Java編寫24點(diǎn)小游戲的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于如何利用Java編寫24點(diǎn)小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Java項(xiàng)目防止SQL注入的幾種方法總結(jié)
SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,在客戶端在向服務(wù)器發(fā)送請求的時候,sql命令通過表單提交或者url字符串拼接傳遞到后臺持久層,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java項(xiàng)目防止SQL注入的幾種方法,需要的朋友可以參考下2023-04-04springboot @Configuration和@Componment的區(qū)別及說明
這篇文章主要介紹了springboot @Configuration和@Componment的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06