Mybatis無法獲取帶有下劃線前綴的字段的值問題
Mybatis無法獲取帶有下劃線前綴的字段的值
今天下面,把幾張表里的字段都加了前綴,如 article_id,article_title,acticle_content,article_status。
然后通過Mybatis-generator 生成了 po和mapper,替換后。
原本正常的網(wǎng)頁,這下數(shù)據(jù)全沒了。當(dāng)時,很淡定,推測可能是哪里寫錯了,改改就好。但是就是這改改,改了幾個小時都沒成功,調(diào)試了很久。打斷點一直是顯示:All Element are null
后來,Ctrl+Z 撤銷所有修改,并把字段的前綴全部去掉。這時候,突然想到,之前有一次就是因為字段加了下劃線導(dǎo)致什么報錯,當(dāng)時為了省事,就全改為沒有下劃線的。同時也關(guān)注到 Mybatis-generator 會把帶有下劃線的字段按照駝峰法命名,會不會是這里呢?
這時候,試了一下不帶下劃線和帶下劃線字段混合的表。
打了斷點,發(fā)現(xiàn)真相在這里
帶有下劃線的字段,都無法獲取值,不帶的則可以。
最終百度找到了解決方案。
這里感謝一下 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è)置了這項后,查詢出來的字段如果帶下劃線,那么就會去掉下劃線,然后采用java駝峰規(guī)則。比如數(shù)據(jù)庫字段Parent_id,那么查詢出來后,會轉(zhuǎn)為parentid,然后去實體類匹配對應(yīng)的字段。 因為你實體類里有下劃線,所以匹配不上。要么采用resultMap 要么禁用掉駝峰規(guī)則(不建議禁用)。如果不想改實體類的話,建議采用resultMap。
2、增加set方法轉(zhuǎn)換值的方式
原實體類
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的實體類查詢就查不到了。
解決方法
在實體類中增加以下兩個set方法并把sql改為
select user_name as username,pass_word as password from demo;
使用實體類查詢數(shù)據(jù)庫實際上就是一個set的過程只需要把每個屬性增加一個set方法就好了
public void setUsernaem(String user_name){ this.user_name=user_name; } public void setPassword(String pass_word){ this.pass_word=pass_word; }
僅適用于不方便改實體類的情況
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實現(xiàn)ArrayList根據(jù)存儲對象排序功能示例
這篇文章主要介紹了java實現(xiàn)ArrayList根據(jù)存儲對象排序功能,結(jié)合實例形式分析了java針對ArrayList的相關(guān)運算、排序操作技巧,需要的朋友可以參考下2018-01-01Spring實現(xiàn)數(shù)據(jù)庫讀寫分離詳解
這篇文章主要介紹了Spring?實現(xiàn)數(shù)據(jù)庫讀寫分離,大多數(shù)系統(tǒng)都是讀多寫少,為了降低數(shù)據(jù)庫的壓力,可以對主庫創(chuàng)建多個從庫,從庫自動從主庫同步數(shù)據(jù),程序中將寫的操作發(fā)送到主庫,將讀的操作發(fā)送到從庫去執(zhí)行,需要的朋友可以參考下2024-01-01SpringCloud Feign參數(shù)問題及解決方法
這篇文章主要介紹了SpringCloud Feign參數(shù)問題及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12springboot實現(xiàn)添加郵件發(fā)送及壓縮功能
這篇文章主要介紹了springboot實現(xiàn)添加郵件發(fā)送及壓縮功能 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07java 過濾器filter防sql注入的實現(xiàn)代碼
下面小編就為大家?guī)硪黄猨ava 過濾器filter防sql注入的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08SpringBoot實現(xiàn)自定義Starter的步驟詳解
在SpringBoot中,Starter是一種特殊的依賴,它可以幫助我們快速地集成一些常用的功能,例如數(shù)據(jù)庫連接、消息隊列、Web框架等。在本文中,我們將介紹如何使用Spring Boot實現(xiàn)自定義Starter,需要的朋友可以參考下2023-06-06