關(guān)于mybatis resulttype 返回值異常的問題
mybatis resulttype 返回值異常
在使用mybatis時。resulttype返回自定義的類時,可能返回的類中字段數(shù)據(jù)存在缺失。
例如:resulttype = "student" 但是當(dāng)中有些字段為空
原因是因為數(shù)據(jù)庫字段和實體類字段不對應(yīng)導(dǎo)致的。 mybatis底層 查詢數(shù)據(jù)返回會更據(jù)數(shù)據(jù)庫的字段和實體類的字段進行匹配,不區(qū)分大小寫。但是字段不一樣就無法傳遞值
例如:數(shù)據(jù)庫字段為:s_name 實體類字段為 name
處理方式1:
在查詢時添加別名 select s_name as name from student 別名對于實體類當(dāng)中的字段。
處理方式2:
返回一個resultMap map配置當(dāng)中指定數(shù)據(jù)庫中的列和實體類的類進行對應(yīng)
<id column="s_name" jdbcType="VARCHAR" property="name"/>
mybatis resultType="map"的常見問題
在配置數(shù)據(jù)源的配置文件中,配置Mybatis的SqlSessionFactoryBean
一、map的key值 與select的字段順序的不一致問題
解決方法:
resultType="map" 修改為 resultType="java.util.LinkedHashMap"
二、值為null的返回map中沒相應(yīng)的key
解決方法:
1.查詢字段使用ifnull函數(shù)(可空字段較多時,不推薦)
2.修改mybatis配置
springmvc:
創(chuàng)建mybatis-config.xml
<?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>
<!-- 當(dāng)返回數(shù)據(jù)類型為map,設(shè)置callSettersOnNulls會把值為null的key也返回 -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/META-INF/spring/mybatis-config.xml" />
<property name="mapperLocations">
<array>
<value>classpath*:/com/xxx/mapper/*.xml</value>
</array>
</property>
</bean>
springboot:
配置文件:mybatis.configuration.call-setters-on-nulls=true
注解方式:
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* mybatis 注解版
*
*/
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);//設(shè)置駝峰命名規(guī)則
configuration.setCallSettersOnNulls(true);
}
};
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud搭建Eureka服務(wù)模塊的過程
Eureka在分布式系統(tǒng)中起到了連接各個微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導(dǎo)讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧2024-02-02
JAVA中通過Redis實現(xiàn)延時任務(wù)demo實例
Redis在2.0版本時引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個channel(頻道),與消息隊列中的topic(主題)類似,可以通過redis的發(fā)布訂閱者模式實現(xiàn)延時任務(wù)功能,實例中會議室預(yù)約系統(tǒng),用戶預(yù)約管理員審核后生效,如未審批,需要自動變超期未處理,使用延時任務(wù)2024-08-08
Java SimpleDateFormat中英文時間格式化轉(zhuǎn)換詳解
這篇文章主要為大家詳細(xì)介紹了Java SimpleDateFormat中英文時間格式化轉(zhuǎn)換,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Spring Boot 整合 MyBatis 連接數(shù)據(jù)庫及常見問題
MyBatis 是一個優(yōu)秀的持久層框架,支持定制化 SQL、存儲過程以及高級映射,下面詳細(xì)介紹如何在 Spring Boot 項目中整合 MyBatis 并連接數(shù)據(jù)庫,感興趣的朋友一起看看吧2025-03-03
Spring?Boot實現(xiàn)第一次啟動時自動初始化數(shù)據(jù)庫流程詳解
在現(xiàn)在的后端開發(fā)中,只要是使用關(guān)系型數(shù)據(jù)庫,相信SSM架構(gòu)(Spring?Boot?+?MyBatis)已經(jīng)成為首選,本文就以Spring?Boot?+?MyBatis為例,使用MySQL作為數(shù)據(jù)庫,完成數(shù)據(jù)庫初始化功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-05-05

