1. 程式人生 > >在Mybatis中,解決資料庫欄位名與java實體類屬性名不一致的三種方式

在Mybatis中,解決資料庫欄位名與java實體類屬性名不一致的三種方式

在使用Mybatis來持久化資料庫時,有時候會碰到資料庫中表中的欄位與java實體類中屬性名不一致的情況,在這種情況下Mybatis是不能完成欄位的自動對映的。而通常情況下,資料庫及實體類是不應該被改的的。所以要在不改變資料庫以及實體類的情況下解決這個問題,下面是解決該問題的三種方式:

java實體類:

public class User
{
	private Long id;
	private String userName;
	private String passWord;
	/**
	 * ...
	 * get,set方法不再列出
	 * ...
	 * */
}


1.既然是因為名字不一致而導致Mybatis不能完成自動對映,那麼就可以將兩者的名字想辦法保持一致,為查詢出的資料庫欄位起個別名就可以,例項如下:

<select id="selectUserById" resultType="User">
        select 
        id,
        user_name as userName,<!--不用在意大小寫,Mybatis會先轉換成大寫再進行匹配  -->
        user_password as userPassword,
        from user
        where id = #{id}
</select>
2.另一種解決名字不一致的方式是事先指定對映關係,這樣Mybatis也能自動完成對映。Mybatis提供了resultMap可以指定對映關係,示例如下:
<resultMap type="User" id="UserResultMap">
		<id column="id" property="id"/>
		<result column="user_name" property="userName"/>
		<result column="user_password" property="userPassword"/>
</resultMap>
	
	
<select id="selectUserById" resultMap="UserResultMap">
        select 
        id,
        user_name,
        user_password,
        from user
        where id = #{id}
</select>
注意:

1.使用resultMap時,在select語句配置中,要有resultMap替換原來的resultType。

2.resultMap中的column要與查詢到的欄位名一致,property要與實體類的屬性一致。

3.在通常情況下,java中的實體類中的屬性一般是採用駝峰命名命名的,而資料庫中表的欄位則用下劃線區分字母。在這種情況下,Mybatis提供了一個全域性屬性mapUnderscoreToCamelCase來解決兩者名字不一致的問題。

<settings>
	<!--其他配置...  -->
	<setting name="mapUnderscoreToCamelCase" value="true"/>
	<!--其他配置...  -->
</settings>
注意:因為該屬性是全域性屬性,所以需要配置在Mybatis的配置檔案中,而不是Mapper.xml對映檔案中。

相關推薦

MyBatis解決資料庫名稱Java實體屬性名稱一致問題

問題描述:       有時候在專案中會遇到資料庫欄位名稱與實體類屬性名稱取得不一樣的情況,如下:      資料庫裡的資料為:       此時,如果我們查詢該表的某條資料,Proj

Mybatis解決資料庫java實體屬性一致方式

在使用Mybatis來持久化資料庫時,有時候會碰到資料庫中表中的欄位與java實體類中屬性名不一致的情況,在這種情況下Mybatis是不能完成欄位的自動對映的。而通常情況下,資料庫及實體類是不應該被改的的。所以要在不改變資料庫以及實體類的情況下解決這個問題,下面是解決該問題

Mybatis學習總結之簡化sql對映xml檔案的引用及解決實體屬性相同的衝突

一、為實體類定義別名,簡化sql對映xml檔案中的引用 我們在sql對映xml檔案中的引用實體類時,需要寫上實體類的全類名(包名+類名),如下:parameterType="com.aiit.pojo.User"這裡寫的實體類User的全類名com.aiit.pojo.User, <i

MyBatis解決實體屬性相同的衝突

在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。    一、準備演示需要使用的表和資料CREATETABLE orders(      order_id INTPRIMARYKE

MyBatis學習總結(四)——解決實體屬性相同的衝突

 在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

Mybatis查詢查詢一個的時候沒有值並且返回null報空指標的解決方法

select IFNULL (MAX(custid), 0) AS custId from user_work_enroll_cust where phone=#{phone}MYsql這裡我們使用IFNULL函式處理即可其他資料在SQLSERVER中我們可以這樣寫:sele

MyBatis——解決實體屬性相同的衝突

在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

easyuidatagrid之formatter解決狀態處理

記錄一下easyui中datagrid裡面的某些問題我們常常會遇到類似於一些在資料庫中的某種狀態的欄位  但是儲存下來的是數字  於是我們常常會將數字就轉化成自己想要的文字例如formatter: function (value) { if (value == 1)

MyBatis (4)——解決實體屬性相同的衝突

在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

MyBatis入門學習教程 解決實體屬性相同的衝突

在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMAR

Mybatis-解決實體屬性相同的衝突

案例: 假如存在這樣的表: CREATE TABLE orders( order_id number(10), order_no VARCHAR(20), order_price number(10)

四、Mybatis解決實體屬性相同的衝突

4.1準備資料表和簡單資料 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR

@Column可以解決資料庫為關鍵字問題

在下面程式碼中numeric欄位是資料庫中的數值型別的關鍵字,只有加上@Column之後才不會報錯import javax.persistence.*;@Table(name = "tb_spec_param")public class SpecParam { @Id @GeneratedValu

spring data jpa 框架在實體新增非資料庫屬性

    Spring-data-jpa表實體的欄位和表的欄位是一一對應的。比如,那麼,如果我在查詢時,想在表字段的基礎上新增幾個返回的欄位,怎麼辦? 解:在實體類中新增我們想新增的欄位,並加上註解:@

Odoo8.0環境限制Selection的有效值

今天有群裡的小夥伴諮詢,一個欄位是Selection型別,可能會有多個可選擇的專案,但在某個介面中,不想使用者選擇全部可選項,只希望在某幾個選項中選擇。如果是Many2one欄位,我們可以根據domain來過濾可選項,但Selection目前沒有這個過濾功能,所以我自己加了一

Gson使用如果有的網路上返回的資料可能為null的處理

Gson使用中的一個小竅門 正式做Android和蘋果開發有一年的時間了,一直想寫篇文章,但是一直比較忙沒時間下筆(其實就給自己找理由,其實就是懶),今天在使用gson解析使用遇到了設定的欄位網路返回的資料是null的問題,有的使用者這個欄位是有返回值,這個欄

rabbitmq template傳送的訊息Date型別比當前時間晚了8小時

前言 前一陣開發過程遇到的問題,用的rabbitmq template傳送訊息,訊息body裡的時間是比當前時間少了8小時的,這種一看就是時區問題了。 就說說為什麼出現吧。 之前的配置是這樣的: @Bean public RabbitTemplate rabbitTemplate(Connection

Mybatis關聯查詢查詢出的記錄數量數據庫直接查詢一致如何解決

mobile 語句 細心 problem 解決方法 指向 map blog money <select id="findUserInfoListForMap" resultMap="BaseResultMap"> SELECT p.name, u.

MyBatis表字段實體屬性衝突的解決方式

解決方式無非是將表字段名對映到實體類對應的屬性名,SQl語言的處理方式不知大家還記不記得,如下的SQL語句:select people_id id,people_name name,people_ag

mybatis資料庫表字段實體屬性不同的衝突之resultMap

resultMap :指定定義的resultMap的id,如果這個resultMap在其他的mapper檔案中,前邊需要加namespace <?xml version="1.0" encod