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

新建一個項目,拷貝之前的,測試實體類字段不一致的情況

測試出現(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實體類中的屬性-->
<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é)果到該類的實例。
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 則更為簡單,適用于簡單的映射場景。在實際應(yīng)用中,根據(jù)具體需求選擇使用 resultMap 或 resultType。
- resultMap 元素是 MyBatis 中最重要最強(qiáng)大的元素。
- ResultMap 的設(shè)計思想是,對簡單的語句做到零配置,對于復(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文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
IDEA2022 提示更新 TKK失敗請檢查網(wǎng)絡(luò)連接的問題
這篇文章主要介紹了IDEA2022 提示:更新 TKK 失敗,請檢查網(wǎng)絡(luò)連接,本文給大家分享解決方案,對idea2022提示更新TKK失敗感興趣的朋友跟隨小編一起看看吧2022-11-11
詳細(xì)聊聊SpringBoot中動態(tài)切換數(shù)據(jù)源的方法
在大型分布式項目中,經(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í)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
springboot @Configuration和@Componment的區(qū)別及說明
這篇文章主要介紹了springboot @Configuration和@Componment的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06

