溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mybatis無法獲取帶有下劃線前綴字段的值怎么辦

發(fā)布時(shí)間:2021-12-02 10:05:16 來源:億速云 閱讀:422 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Mybatis無法獲取帶有下劃線前綴字段的值怎么辦”,在日常操作中,相信很多人在Mybatis無法獲取帶有下劃線前綴字段的值怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mybatis無法獲取帶有下劃線前綴字段的值怎么辦”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

Mybatis無法獲取帶有下劃線前綴的字段的值

今天下面,把幾張表里的字段都加了前綴,如 article_id,article_title,acticle_content,article_status。

然后通過Mybatis-generator 生成了 po和mapper,替換后。

原本正常的網(wǎng)頁,這下數(shù)據(jù)全沒了。當(dāng)時(shí),很淡定,推測可能是哪里寫錯(cuò)了,改改就好。但是就是這改改,改了幾個(gè)小時(shí)都沒成功,調(diào)試了很久。打斷點(diǎn)一直是顯示:All Element are null

后來,Ctrl+Z 撤銷所有修改,并把字段的前綴全部去掉。這時(shí)候,突然想到,之前有一次就是因?yàn)樽侄渭恿讼聞澗€導(dǎo)致什么報(bào)錯(cuò),當(dāng)時(shí)為了省事,就全改為沒有下劃線的。同時(shí)也關(guān)注到 Mybatis-generator 會把帶有下劃線的字段按照駝峰法命名,會不會是這里呢?

這時(shí)候,試了一下不帶下劃線和帶下劃線字段混合的表。

打了斷點(diǎn),發(fā)現(xiàn)真相在這里

Mybatis無法獲取帶有下劃線前綴字段的值怎么辦

帶有下劃線的字段,都無法獲取值,不帶的則可以。

最終百度找到了解決方案。

這里感謝一下 valder fields

解決辦法

在mybatis-config.xml文件里配置

<configuration>
    <!-- 全局配置 -->
    <settings>
        <!--允許 JDBC 支持自動生成主鍵-->
        <setting name="useGeneratedKeys" value="false"/>
       <!--是否開啟自動駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 到經(jīng)典
Java 屬性名 aColumn 的類似映射。 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

Mybatis無法給帶有下劃線屬性賦值

1、配置問題

<!-- 是否開啟自動駝峰命名規(guī)則(camel case)映射, -->
<setting name="mapUnderscoreToCamelCase" value="true"/>

或者

//開啟駝峰映射
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

mybatis配置文件設(shè)置了這項(xiàng)后,查詢出來的字段如果帶下劃線,那么就會去掉下劃線,然后采用java駝峰規(guī)則。比如數(shù)據(jù)庫字段Parent_id,那么查詢出來后,會轉(zhuǎn)為parentid,然后去實(shí)體類匹配對應(yīng)的字段。 因?yàn)槟銓?shí)體類里有下劃線,所以匹配不上。要么采用resultMap 要么禁用掉駝峰規(guī)則(不建議禁用)。如果不想改實(shí)體類的話,建議采用resultMap。

2、增加set方法轉(zhuǎn)換值的方式

原實(shí)體類

public class demo {  
      private String user_name;  
      private Striing pass_word;             
      public String getPass_word(){  
           return pass_word;  
      }  
      public void setPass_word(String pass_word){  
           this.pass_word=pass_word;  
      }       
    }

原sql

select user_name,pass_word from demo;

這句sql在數(shù)據(jù)庫可以查到數(shù)據(jù),但是使用mybatis的實(shí)體類查詢就查不到了。

解決方法

在實(shí)體類中增加以下兩個(gè)set方法并把sql改為

select user_name as username,pass_word as password from demo;

使用實(shí)體類查詢數(shù)據(jù)庫實(shí)際上就是一個(gè)set的過程只需要把每個(gè)屬性增加一個(gè)set方法就好了

public void setUsernaem(String user_name){  
          this.user_name=user_name;  
     }  
     public void setPassword(String pass_word){  
          this.pass_word=pass_word;  
     }

到此,關(guān)于“Mybatis無法獲取帶有下劃線前綴字段的值怎么辦”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI