mybatisplus驼峰命名映射的问题解决
问题的提出
今天我在测试mybatis的时候,发现查询出来的一些字段为null,而且这些字段都是驼峰命名了的。所以我首先就想到了是数据库表字段和类映射出了问题。
解决办法
一、理解spring-mybatis.xml中关于驼峰命名的配置
mybatisplus是mybatis的升级版,所以配置还是有点儿差别,如果是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"/> <!--映射数据库下划线字段名到数据库实体类的驼峰命名的映射--> <property name="dbColumnUnderline" value="true"/> </bean>
二、在xml代码中正确的映射类和表
1、使用resultType直接映射到实体类
直接上代码:
<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>
<!-- 通用查询结果列-->
<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>
<!--验证用户登录-->
<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、这种方法不用驼峰命名也没关系,
<!-- MP 全局配置 --> <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> <!-- 全局的主键策略 --> <property name="idType" value="0"/> <!--映射数据库下划线字段名到数据库实体类的驼峰命名的映射--> <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>
<!-- 通用查询结果列-->
<sql id="Base_Column_List">
id, login_name , name, password, salt, sex, age, phone, user_type , status, organization_id , create_time
</sql>
<!--验证用户登录-->
<select id="selectUserByLoginNameAndPwd" resultMap="userVoResultMap">
SELECT
<include refid="Base_Column_List"/>
from user
where login_name=#{loginName} and password=#{password}
</select>注意:
1、这种方法是使用了驼峰命名了的,所有一定要在MP中设置驼峰命名
<!-- MP 全局配置 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 全局的主键策略 -->
<property name="idType" value="0"/>
<!--映射数据库下划线字段名到数据库实体类的驼峰命名的映射-->
<property name="dbColumnUnderline" value="true"/>
</bean>dbColumnUnderline必须为true
2、既然使用了驼峰命名,就自然不能再数据库字段上用“as”了。
到此这篇关于mybatisplus驼峰命名映射的问题解决的文章就介绍到这了,更多相关mybatisplus驼峰命名映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决springboot 多线程使用MultipartFile读取excel文件内容报错问题
这篇文章主要介绍了解决springboot 多线程使用MultipartFile读取excel文件内容报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-09-09
Intellij IDEA下Spring Boot热切换配置
这篇文章主要介绍了Intellij IDEA下Spring Boot热切换配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08
SpringBoot在Controller层接收参数的n种姿势(超详细)
这篇文章主要介绍了SpringBoot在Controller层接收参数的常用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-01-01
java:程序包org.apache.ibatis.annotations不存在报错解决
这篇文章主要给大家介绍了关于java:程序包org.apache.ibatis.annotations不存在报错的解决方法,这个错误是我在直接导入springboot项目的时候报错的,文中通过图文介绍的非常详细,需要的朋友可以参考下2023-04-04
Java8中 LocalDate和java.sql.Date的相互转换操作
这篇文章主要介绍了Java8中 LocalDate和java.sql.Date的相互转换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-12-12


最新评论