Mybatis有查詢結(jié)果但存不進(jìn)實(shí)體類的解決方案
問題描述
使用Mybatis查詢得到實(shí)體類
表定義如下
| 成員ID | 成員姓名 |
|---|---|
| member_id | member_name |
對應(yīng)的實(shí)體類如下
public class Member {
private Integer memberId;
private String memberName;
// 省略getter和setter
}
對應(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é)果集是有返回數(shù)據(jù)的,但是寫不進(jìn)去Member實(shí)體類中,最后發(fā)現(xiàn)是因?yàn)閿?shù)據(jù)庫與Java命名的規(guī)范是不一樣的,需要轉(zhuǎn)換,Mybatis也提供了相對應(yīng)的駝峰命名轉(zhuǎn)換法。
例如member_id對應(yīng)memberId,但是默認(rèn)是不啟用的,所以需要手動啟動。
解決方法
如果使用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)換法
按照以上配置后重新訪問則可以獲得一個查詢后的實(shí)體類。
補(bǔ)充知識:mybatis查詢參數(shù)中既有 實(shí)體類參數(shù)又有基本類型參數(shù) 解決方案
這個方法真實(shí)有效,直接上代碼
DAO中的查詢方法
public LogisticNodes findFirstNode(
@Param("ln")LogisticNodes ln,@Param("stringId")String stringId);
第一個參數(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í)體類的解決方案就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時任務(wù)流程詳解
ShedLock是一個鎖,官方解釋是他永遠(yuǎn)只是一個鎖,并非是一個分布式任務(wù)調(diào)度器。一般shedLock被使用的場景是,你有個任務(wù),你只希望他在單個節(jié)點(diǎn)執(zhí)行,而不希望他并行執(zhí)行,而且這個任務(wù)是支持重復(fù)執(zhí)行的2023-02-02
如何用Java?幾分鐘處理完?30?億個數(shù)據(jù)(項(xiàng)目難題)
現(xiàn)有一個 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計,今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個數(shù)據(jù),這個問題一直以來是項(xiàng)目難題,今天通過本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2022-07-07
修改request的parameter的幾種方式總結(jié)
這篇文章主要介紹了修改request的parameter的幾種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java中l(wèi)ist.foreach不能使用字符串拼接的問題
這篇文章主要介紹了Java中l(wèi)ist.foreach不能使用字符串拼接的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

