關於mybatis resulttype 返回值異常的問題

mybatis resulttype 返回值異常

在使用mybatis時。resulttype返回自定義的類時,可能返回的類中字段數據存在缺失。

例如:resulttype = “student” 但是當中有些字段為空

原因是因為數據庫字段和實體類字段不對應導致的。 mybatis底層 查詢數據返回會更據數據庫的字段和實體類的字段進行匹配,不區分大小寫。但是字段不一樣就無法傳遞值

例如:數據庫字段為:s_name 實體類字段為 name

處理方式1:

在查詢時添加別名 select s_name as name from student 別名對於實體類當中的字段。

處理方式2:

返回一個resultMap map配置當中指定數據庫中的列和實體類的類進行對應

<id column="s_name" jdbcType="VARCHAR" property="name"/>

mybatis resultType=”map”的常見問題

在配置數據源的配置文件中,配置Mybatis的SqlSessionFactoryBean

一、map的key值 與select的字段順序的不一致問題

解決方法:

resultType=”map” 修改為 resultType=”java.util.LinkedHashMap”

二、值為null的返回map中沒相應的key

解決方法:

1.查詢字段使用ifnull函數(可空字段較多時,不推薦)

2.修改mybatis配置

springmvc:

創建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> 
        <!-- 當返回數據類型為map,設置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);//設置駝峰命名規則 
                configuration.setCallSettersOnNulls(true);
            }  
        };  
    }  
}  

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: