數據庫字段爲USER_ID,實體類爲userId,在application.xml做如下配置,可以自動進行映射:
mybatis.configuration.mapUnderscoreToCamelCase=true
或新建mybatis.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>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
進行以上配置後,並沒有映射成功,查出來的數據都爲null。問題分析:
1、把項目整體遷移到MySQL數據庫上,可以正常查出數據,能夠正常映射,那麼可以證明是Oracle數據庫的問題,或者是Mybatis的設置問題,排除代碼邏輯問題。
2、爲實體類加入映射規則:
<resultMap type="com.bocom.protemp.common.shiro.entity.UserEntity" id="userMap">
<result property="userId" column="USER_ID"/>
</resultMap>
問題依舊,查出的數據還是null值。3、使用最簡單的例子做測試,如果數據庫字段是這樣USERID,沒有下劃線,那麼Mybatis是可以映射成功的。也就是說,Mybatis在使用Oracle數據庫時,字段帶上下劃線不能映射。
解決方式:
1、將實體類改爲和數據庫字段一模一模,即也加上下劃線,但這樣又不符合JAVA的駝峯命名規範,但如果不能修改數據庫,這也是權宜之計。
2、修改數據庫字段,將下劃線去除,如USER_ID改爲USERID,這個方式對於數據庫來說並不友好,因爲單詞間沒有分割,單看字段名很難一目瞭然的明白字段的意義。
最後,附上官方的配置說明 mybatis-spring-boot-autoconfigure – MyBatis Sring-BootStarter | Reference Documentation http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration