mybatisplus駝峰命名映射的問題解決
問題的提出
今天我在測試mybatis的時候,發(fā)現(xiàn)查詢出來的一些字段為null,而且這些字段都是駝峰命名了的。所以我首先就想到了是數(shù)據(jù)庫表字段和類映射出了問題。
解決辦法
一、理解spring-mybatis.xml中關(guān)于駝峰命名的配置
mybatisplus是mybatis的升級版,所以配置還是有點(diǎn)兒差別,如果是mybatis的話,直接在configuration中配置就行了,如下:
<?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" /> ? ? ? ? <setting name="cacheEnabled" value="false"/> ? ? ? ? <setting name="lazyLoadingEnabled" value="false"/> ? ? ? ? <setting name="aggressiveLazyLoading" value="true"/> ? ? ? ? <setting name="logImpl" value="LOG4J2"/> ? ? </settings> </configuration>?
但是mybatisplus的駝峰命名配置是在MP全局配置中完成的
廢話不說,直接上代碼
? ? <!-- MP 全局配置 --> ? ? <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> ? ? ? ? <!-- 全局的主鍵策略 --> ? ? ? ? <property name="idType" value="0"/> ? ? ? ? <!--映射數(shù)據(jù)庫下劃線字段名到數(shù)據(jù)庫實(shí)體類的駝峰命名的映射--> ? ? ? ? <property name="dbColumnUnderline" value="true"/> ? ? </bean>
二、在xml代碼中正確的映射類和表
1、使用resultType直接映射到實(shí)體類
直接上代碼:
? ? <resultMap id="userVoResultMap" type="com.ranqing.model.vo.UserVo"> ? ? ? ? <id column="id" property="id" jdbcType="BIGINT"/> ? ? ? ? <result column="login_name" property="loginName" jdbcType="VARCHAR"/> ? ? ? ? <result column="name" property="name" jdbcType="VARCHAR"/> ? ? ? ? <result column="password" property="password" jdbcType="VARCHAR"/> ? ? ? ? <result column="sex" property="sex" jdbcType="TINYINT"/> ? ? ? ? <result column="age" property="age" jdbcType="TINYINT"/> ? ? ? ? <result column="user_type" property="userType" jdbcType="TINYINT"/> ? ? ? ? <result column="status" property="status" jdbcType="TINYINT"/> ? ? ? ? <result column="organization_id" property="organizationId" jdbcType="INTEGER"/> ? ? ? ? <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/> ? ? ? ? <result column="phone" property="phone" jdbcType="VARCHAR"/> ? ? ? ? <result column="organizationName" property="organizationName" jdbcType="VARCHAR"/> ? ? ? ? <collection property="rolesList" ofType="Role"> ? ? ? ? ? ? <id column="roleId" property="id"/> ? ? ? ? ? ? <result column="roleName" property="name"/> ? ? ? ? </collection> ? ? </resultMap> ? ? <!-- 通用查詢結(jié)果列--> ? ? <sql id="Base_Column_List"> ? ? ? ? id, login_name AS loginName, name, password, salt, sex, age, phone, user_type AS userType, status, organization_id AS organizationId, create_time AS createTime ? ? </sql> ? ? <!--驗(yàn)證用戶登錄--> ? ? <select id="selectUserByLoginNameAndPwd" resultType="com.ranqing.model.vo.UserVo"> ? ? ? ? ? SELECT ? ? ? ? <include refid="Base_Column_List"/> ? ? ? ? from user ? ? ? ? where login_name=#{loginName} and password=#{password} ? ? </select>
注意:
1、凡是需要駝峰的字段都要用“as”取別名,然后直接resultType到UserVo上
2、這種方法不用駝峰命名也沒關(guān)系,
? ? <!-- MP 全局配置 --> ? ? <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> ? ? ? ? <!-- 全局的主鍵策略 --> ? ? ? ? <property name="idType" value="0"/> ? ? ? ? <!--映射數(shù)據(jù)庫下劃線字段名到數(shù)據(jù)庫實(shí)體類的駝峰命名的映射--> ? ? ? ? <property name="dbColumnUnderline" value="false"/> ? ? </bean>
dbColumnUnderline為true或false都可以
2、使用駝峰命名映射
先上代碼:
? ? <resultMap id="userVoResultMap" type="com.ranqing.model.vo.UserVo"> ? ? ? ? <id column="id" property="id" jdbcType="BIGINT"/> ? ? ? ? <result column="login_name" property="loginName" jdbcType="VARCHAR"/> ? ? ? ? <result column="name" property="name" jdbcType="VARCHAR"/> ? ? ? ? <result column="password" property="password" jdbcType="VARCHAR"/> ? ? ? ? <result column="sex" property="sex" jdbcType="TINYINT"/> ? ? ? ? <result column="age" property="age" jdbcType="TINYINT"/> ? ? ? ? <result column="user_type" property="userType" jdbcType="TINYINT"/> ? ? ? ? <result column="status" property="status" jdbcType="TINYINT"/> ? ? ? ? <result column="organization_id" property="organizationId" jdbcType="INTEGER"/> ? ? ? ? <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/> ? ? ? ? <result column="phone" property="phone" jdbcType="VARCHAR"/> ? ? ? ? <result column="organizationName" property="organizationName" jdbcType="VARCHAR"/> ? ? ? ? <collection property="rolesList" ofType="Role"> ? ? ? ? ? ? <id column="roleId" property="id"/> ? ? ? ? ? ? <result column="roleName" property="name"/> ? ? ? ? </collection> ? ? </resultMap> ? ? <!-- 通用查詢結(jié)果列--> ? ? <sql id="Base_Column_List"> ? ? ? ? id, login_name , name, password, salt, sex, age, phone, user_type , status, organization_id , create_time ? ? </sql> ? ? <!--驗(yàn)證用戶登錄--> ? ? <select id="selectUserByLoginNameAndPwd" resultMap="userVoResultMap"> ? ? ? ? ? SELECT ? ? ? ? <include refid="Base_Column_List"/> ? ? ? ? from user ? ? ? ? where login_name=#{loginName} and password=#{password} ? ? </select>
注意:
1、這種方法是使用了駝峰命名了的,所有一定要在MP中設(shè)置駝峰命名
<!-- MP 全局配置 --> <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> <!-- 全局的主鍵策略 --> <property name="idType" value="0"/> <!--映射數(shù)據(jù)庫下劃線字段名到數(shù)據(jù)庫實(shí)體類的駝峰命名的映射--> <property name="dbColumnUnderline" value="true"/> </bean>
dbColumnUnderline必須為true
2、既然使用了駝峰命名,就自然不能再數(shù)據(jù)庫字段上用“as”了。
到此這篇關(guān)于mybatisplus駝峰命名映射的問題解決的文章就介紹到這了,更多相關(guān)mybatisplus駝峰命名映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯問題
這篇文章主要介紹了解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報(bào)錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Intellij IDEA下Spring Boot熱切換配置
這篇文章主要介紹了Intellij IDEA下Spring Boot熱切換配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08SpringBoot在Controller層接收參數(shù)的n種姿勢(超詳細(xì))
這篇文章主要介紹了SpringBoot在Controller層接收參數(shù)的常用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01基于IDEA創(chuàng)建SpringMVC項(xiàng)目流程圖解
這篇文章主要介紹了基于IDEA創(chuàng)建SpringMVC項(xiàng)目流程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10java:程序包org.apache.ibatis.annotations不存在報(bào)錯解決
這篇文章主要給大家介紹了關(guān)于java:程序包org.apache.ibatis.annotations不存在報(bào)錯的解決方法,這個錯誤是我在直接導(dǎo)入springboot項(xiàng)目的時候報(bào)錯的,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04深入解析Java中的Classloader的運(yùn)行機(jī)制
這篇文章主要介紹了Java中的Classloader的運(yùn)行機(jī)制,包括從JVM方面講解類加載器的委托機(jī)制等,需要的朋友可以參考下2015-11-11Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作
這篇文章主要介紹了Java8中 LocalDate和java.sql.Date的相互轉(zhuǎn)換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12