MyBatis中實現(xiàn)數(shù)據(jù)封裝的示例代碼
在使用MyBatis的時候,我們發(fā)現(xiàn)有些查詢后的數(shù)據(jù)庫表的字段名能夠正確封裝到實體類的屬性名中,而有些數(shù)據(jù)庫表中的字段名卻不能夠正確封裝到實體類的對應屬性中,這是為什么呢?

觀察控制臺輸出打印日志以及實體類屬性和數(shù)據(jù)庫表字段的關系如下:


只有實體類屬性名和數(shù)據(jù)庫表中查詢返回的字段名保持一致時,MyBatis才會為我們實現(xiàn)自動映射,在實體類屬性名和數(shù)據(jù)庫表字段名不一致時,通過控制臺打印的日志可以知道MyBatis并不能為我們實現(xiàn)對應數(shù)據(jù)的自動映射。那么該如何解決數(shù)據(jù)映射的問題呢?
- 手動結果映射
- 給字段名起別名
- 在配置文件中開啟駝峰命名的配置
手動結果映射
1). 在Mapper持久層接口方法上,通過@Results及@Result注解進行手動結果映射。
@Results的源碼
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Results {
/**
* Returns the id of this result map.
*
* @return the id of this result map
*/
String id() default "";//這個結果映射集的名字
/**
* Returns mapping definitions for property.
*
* @return mapping definitions
*/
Result[] value() default {};//Result類型數(shù)組
}
@Result部分源碼
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(Results.class)
public @interface Result {
/**
* Returns whether id column or not.
*
* @return {@code true} if id column; {@code false} if otherwise
*/
boolean id() default false;//通過true/false表示當前列是否為主鍵
/**
* Return the column name(or column label) to map to this argument.
*
* @return the column name(or column label)
*/
String column() default "";//指定表中要映射字段名
/**
* Returns the property name for applying this mapping.
*
* @return the property name
*/
String property() default "";//指定類中要被映射的屬性名
}
觀察控制臺手動結果映射后的日志:

當然如果在別的SQL中也需要復用這個映射關系時,我們可以給這個@Results中指定一個名字id,最后通過使用@ResultMap注解來使用這個映射關系。
@ResultMap
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ResultMap {
/**
* Returns result map names to use.
*
* @return result map names
*/
String[] value();//映射關系名
}
在其他方法中引用這個映射關系,并在控制臺打印映射后的日志:


2). 當然除了在通過注解來實現(xiàn)手動結果映射外,我們還可以在XML文件中通過<resultMap>...</resultMap>標簽來自定義映射結果集,從而實現(xiàn)手動結果映射。

起別名
通過在SQL語句中對數(shù)據(jù)庫表字段名與實體類屬性名無法映射的列起別名,使得數(shù)據(jù)庫表中字段名的別名與實體類屬性名一致實現(xiàn)映射。


在配置文件中開啟駝峰命名
打開配置文件application.properties中駝峰轉換的開關
# 配置Mybatis的駝峰命名自動轉換,使數(shù)據(jù)庫表中字段名和實體類屬性間實現(xiàn)蛇形命名和駝峰命名的自動映射 mybatis.configuration.map-underscore-to-camel-case=true
如果數(shù)據(jù)庫表中字段名與實體類屬性名符合駝峰命名規(guī)則,MyBatis會自動通過駝峰命名規(guī)則實現(xiàn)自動映射。駝峰命名規(guī)則:abc_xyz => abcXyz
- 數(shù)據(jù)庫表中字段名:abc_xyz
- 實體類中屬性名:abcXyz
這里做一個特別補充:通常我們在保存信息的時候,需要記錄這個操作的id號來保存操作記錄。所以當我們保存完信息后需要獲取到保存信息的id號,這時候可以通過MyBatis中提供的主鍵返回功能來獲取。
Options(useGeneraateKeys = true, keyProperty = "id"),通過這個注解聲明要使用返回的主鍵,并將這個主鍵映射到keyProperty指定的類屬性中。
這時候可以通過MyBatis中提供的主鍵返回功能來獲取。
Options(useGeneraateKeys = true, keyProperty = "id"),通過這個注解聲明要使用返回的主鍵,并將這個主鍵映射到keyProperty指定的類屬性中。
到此這篇關于MyBatis中實現(xiàn)數(shù)據(jù)封裝的示例代碼的文章就介紹到這了,更多相關MyBatis 數(shù)據(jù)封裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot結合Quartz實現(xiàn)數(shù)據(jù)庫存儲
本文主要介紹了SpringBoot+Quartz+數(shù)據(jù)庫存儲,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼
我們把數(shù)據(jù)存到數(shù)據(jù)庫的時候,有些敏感字段是需要加密的,從數(shù)據(jù)庫查出來再進行解密,如果我們使用的是Mybatis框架,那就跟著一起探索下如何使用框架的攔截器功能實現(xiàn)自動加解密吧,需要的朋友可以參考下2024-06-06
java批量下載將多個文件(minio中存儲)壓縮成一個zip包代碼示例
在Java應用程序中有時我們需要從多個URL地址下載文件,并將這些文件打包成一個Zip文件進行批量處理或傳輸,這篇文章主要給大家介紹了關于java批量下載將多個文件(minio中存儲)壓縮成一個zip包的相關資料,需要的朋友可以參考下2023-11-11
SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務
SpringBoot中的@Scheduled注解為定時任務提供了一種很簡單的實現(xiàn),本文主要介紹了SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務,具有一定的參考價值,感興趣的可以了解一下2024-01-01
@Accessors(chain = true)注解報錯的解決方案
這篇文章主要介紹了@Accessors(chain = true)注解報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
springboot3整合knife4j詳細圖文教程(swagger增強)
開發(fā)api提供對應的接口規(guī)范進行聯(lián)調或并行開發(fā),api文檔管理必不可少,常用的Knife4j基于swagger(依賴已經compile),可以進行管理,下面這篇文章主要給大家介紹了關于springboot3整合knife4j的相關資料,需要的朋友可以參考下2024-03-03
Java使用Flyway實現(xiàn)數(shù)據(jù)庫版本控制的技術指南
在現(xiàn)代應用開發(fā)中,數(shù)據(jù)庫結構經常隨著業(yè)務需求不斷演變,使用手動SQL腳本管理數(shù)據(jù)庫版本,不僅容易出現(xiàn)錯誤,還難以跟蹤和回滾,Flyway是一個強大的數(shù)據(jù)庫遷移工具,能夠幫助開發(fā)者高效管理和自動化數(shù)據(jù)庫的版本控制,本文將介紹Flyway的基本功能及其在SpringBoot項目中的實踐2025-02-02
Spring中property-placeholder的使用與解析詳解
本篇文章主要介紹了Spring中property-placeholder的使用與解析詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

