Mybatis無(wú)法獲取帶有下劃線前綴的字段的值問(wèn)題
Mybatis無(wú)法獲取帶有下劃線前綴的字段的值
今天下面,把幾張表里的字段都加了前綴,如 article_id,article_title,acticle_content,article_status。
然后通過(guò)Mybatis-generator 生成了 po和mapper,替換后。
原本正常的網(wǎng)頁(yè),這下數(shù)據(jù)全沒(méi)了。當(dāng)時(shí),很淡定,推測(cè)可能是哪里寫(xiě)錯(cuò)了,改改就好。但是就是這改改,改了幾個(gè)小時(shí)都沒(méi)成功,調(diào)試了很久。打斷點(diǎn)一直是顯示:All Element are null
后來(lái),Ctrl+Z 撤銷所有修改,并把字段的前綴全部去掉。這時(shí)候,突然想到,之前有一次就是因?yàn)樽侄渭恿讼聞澗€導(dǎo)致什么報(bào)錯(cuò),當(dāng)時(shí)為了省事,就全改為沒(méi)有下劃線的。同時(shí)也關(guān)注到 Mybatis-generator 會(huì)把帶有下劃線的字段按照駝峰法命名,會(huì)不會(huì)是這里呢?
這時(shí)候,試了一下不帶下劃線和帶下劃線字段混合的表。
打了斷點(diǎn),發(fā)現(xiàn)真相在這里
帶有下劃線的字段,都無(wú)法獲取值,不帶的則可以。
最終百度找到了解決方案。
這里感謝一下 valder fields
解決辦法
在mybatis-config.xml文件里配置
<configuration> <!-- 全局配置 --> <settings> <!--允許 JDBC 支持自動(dòng)生成主鍵--> <setting name="useGeneratedKeys" value="false"/> <!--是否開(kāi)啟自動(dòng)駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫(kù)列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的類似映射。 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
Mybatis無(wú)法給帶有下劃線屬性賦值
1、配置問(wèn)題
<!-- 是否開(kāi)啟自動(dòng)駝峰命名規(guī)則(camel case)映射, --> <setting name="mapUnderscoreToCamelCase" value="true"/>
或者
//開(kāi)啟駝峰映射 bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
mybatis配置文件設(shè)置了這項(xiàng)后,查詢出來(lái)的字段如果帶下劃線,那么就會(huì)去掉下劃線,然后采用java駝峰規(guī)則。比如數(shù)據(jù)庫(kù)字段Parent_id,那么查詢出來(lái)后,會(huì)轉(zhuǎn)為parentid,然后去實(shí)體類匹配對(duì)應(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ù)庫(kù)可以查到數(shù)據(jù),但是使用mybatis的實(shí)體類查詢就查不到了。
解決方法
在實(shí)體類中增加以下兩個(gè)set方法并把sql改為
select user_name as username,pass_word as password from demo;
使用實(shí)體類查詢數(shù)據(jù)庫(kù)實(shí)際上就是一個(gè)set的過(guò)程只需要把每個(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; }
僅適用于不方便改實(shí)體類的情況
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)ArrayList根據(jù)存儲(chǔ)對(duì)象排序功能示例
這篇文章主要介紹了java實(shí)現(xiàn)ArrayList根據(jù)存儲(chǔ)對(duì)象排序功能,結(jié)合實(shí)例形式分析了java針對(duì)ArrayList的相關(guān)運(yùn)算、排序操作技巧,需要的朋友可以參考下2018-01-01Spring實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離詳解
這篇文章主要介紹了Spring?實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離,大多數(shù)系統(tǒng)都是讀多寫(xiě)少,為了降低數(shù)據(jù)庫(kù)的壓力,可以對(duì)主庫(kù)創(chuàng)建多個(gè)從庫(kù),從庫(kù)自動(dòng)從主庫(kù)同步數(shù)據(jù),程序中將寫(xiě)的操作發(fā)送到主庫(kù),將讀的操作發(fā)送到從庫(kù)去執(zhí)行,需要的朋友可以參考下2024-01-01java雙端隊(duì)列之ArrayDequeue原理講解
這篇文章主要為大家介紹了java雙端隊(duì)列之ArrayDequeue原理講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06SpringCloud Feign參數(shù)問(wèn)題及解決方法
這篇文章主要介紹了SpringCloud Feign參數(shù)問(wèn)題及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12springboot實(shí)現(xiàn)添加郵件發(fā)送及壓縮功能
這篇文章主要介紹了springboot實(shí)現(xiàn)添加郵件發(fā)送及壓縮功能 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07java 過(guò)濾器filter防sql注入的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇java 過(guò)濾器filter防sql注入的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08SpringBoot實(shí)現(xiàn)自定義Starter的步驟詳解
在SpringBoot中,Starter是一種特殊的依賴,它可以幫助我們快速地集成一些常用的功能,例如數(shù)據(jù)庫(kù)連接、消息隊(duì)列、Web框架等。在本文中,我們將介紹如何使用Spring Boot實(shí)現(xiàn)自定義Starter,需要的朋友可以參考下2023-06-06