Mybatis有查詢結(jié)果但存不進(jìn)實(shí)體類的解決方案
問題描述
使用Mybatis查詢得到實(shí)體類
表定義如下
| 成員ID | 成員姓名 |
|---|---|
| member_id | member_name |
對(duì)應(yīng)的實(shí)體類如下
public class Member {
private Integer memberId;
private String memberName;
// 省略getter和setter
}
對(duì)應(yīng)的Mapper.xml如下
<select id="selectMemberByMemberName" resultType="Member">
SELECT *
FROM member
WHERE member_name = #{memberName}
</select>
通過以下代碼得到的member居然是null,這是為什么呢?
Member member = memberMapper.selectMemberByMemberName(memberName);
在日志我啟用了DEBUG模式,發(fā)現(xiàn)查詢結(jié)果集是有返回?cái)?shù)據(jù)的,但是寫不進(jìn)去Member實(shí)體類中,最后發(fā)現(xiàn)是因?yàn)閿?shù)據(jù)庫(kù)與Java命名的規(guī)范是不一樣的,需要轉(zhuǎn)換,Mybatis也提供了相對(duì)應(yīng)的駝峰命名轉(zhuǎn)換法。
例如member_id對(duì)應(yīng)memberId,但是默認(rèn)是不啟用的,所以需要手動(dòng)啟動(dòng)。
解決方法
如果使用Mybatis配置文件,則可以按如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 開啟駝峰命名轉(zhuǎn)換 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
如果是springboot集成的,則可以做如下配置
mybatis: configuration: mapUnderscoreToCamelCase: true # 開啟駝峰命名轉(zhuǎn)換法
按照以上配置后重新訪問則可以獲得一個(gè)查詢后的實(shí)體類。
補(bǔ)充知識(shí):mybatis查詢參數(shù)中既有 實(shí)體類參數(shù)又有基本類型參數(shù) 解決方案
這個(gè)方法真實(shí)有效,直接上代碼
DAO中的查詢方法
public LogisticNodes findFirstNode(
@Param("ln")LogisticNodes ln,@Param("stringId")String stringId);
第一個(gè)參數(shù)為實(shí)體類,需要加上@param()注解
xml中的寫法
SELECT
<include refid="logisticNodesColumns"/>
FROM
order_logistic_nodes a
<where>
<if test="ln.id != null and ln.id !=''">
AND a.id = #{ln.id,jdbcType=VARCHAR}
</if>
<if test="ln.nodeName != null and ln.nodeName !=''">
AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR}
</if>
<if test="ln.nodeSort != null">
AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL}
</if>
</where>
and
a.logistic_type IN (
SELECT
s.logistic_type
FROM
order_logistic_nodes s
<where>
<if test="stringId != null and stringId !=''">
s.id = #{stringId,jdbcType=VARCHAR}
</if>
</where>
)
order by a.node_sort
limit 1
xml中,取實(shí)體類的屬性前面要加上類的引用
以上這篇Mybatis有查詢結(jié)果但存不進(jìn)實(shí)體類的解決方案就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)流程詳解
ShedLock是一個(gè)鎖,官方解釋是他永遠(yuǎn)只是一個(gè)鎖,并非是一個(gè)分布式任務(wù)調(diào)度器。一般shedLock被使用的場(chǎng)景是,你有個(gè)任務(wù),你只希望他在單個(gè)節(jié)點(diǎn)執(zhí)行,而不希望他并行執(zhí)行,而且這個(gè)任務(wù)是支持重復(fù)執(zhí)行的2023-02-02
druid配置數(shù)據(jù)庫(kù)連接使用密文密碼方式
這篇文章主要介紹了druid配置數(shù)據(jù)庫(kù)連接使用密文密碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-12-12
mybatis配置對(duì)象包含對(duì)象以及List的方式
這篇文章主要介紹了mybatis配置對(duì)象包含對(duì)象以及List的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)
現(xiàn)有一個(gè) 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計(jì),今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù),這個(gè)問題一直以來是項(xiàng)目難題,今天通過本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2022-07-07
修改request的parameter的幾種方式總結(jié)
這篇文章主要介紹了修改request的parameter的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java中l(wèi)ist.foreach不能使用字符串拼接的問題
這篇文章主要介紹了Java中l(wèi)ist.foreach不能使用字符串拼接的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
java郵件發(fā)送簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了java郵件發(fā)送簡(jiǎn)單實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03

