MyBatis屬性名和字段名不一致的問題解決方法
解決屬性名和字段名不一致的問題
1. 問題
數(shù)據(jù)庫(kù)中的字段

新建一個(gè)項(xiàng)目,拷貝之前的,測(cè)試實(shí)體類字段不一致的情況

測(cè)試出現(xiàn)問題

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

