mybatisplus驼峰命名映射的问题解决

 更新时间:2023年07月12日 09:59:53   作者:ranqing007  
本文主要介绍了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驼峰命名映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC 异常处理机制与自定义异常处理方式

    SpringMVC 异常处理机制与自定义异常处理方式

    这篇文章主要介绍了SpringMVC 异常处理机制与自定义异常处理方式,具有很好的开车价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 浅析Java中接口和抽象类的七大区别

    浅析Java中接口和抽象类的七大区别

    Java 是一门面向对象的编程语言,面向对象的编程语言有四大特征:抽象、封装、继承和多态。本文介绍的接口和抽象类就是面向对象编程中“抽象”的具体实现。本文也将为大家详细讲一下二者的区别,需要的可以参考一下
    2021-12-12
  • SpringBoot启动yaml报错的解决

    SpringBoot启动yaml报错的解决

    这篇文章主要介绍了SpringBoot启动yaml报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot3集成Zookeeper的代码详解

    SpringBoot3集成Zookeeper的代码详解

    ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务,分布式应用程序以某种形式使用所有这些类型的服务,本文将给大家介绍SpringBoot3集成Zookeeper的代码,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java文件如何统计字母出现的次数和百分比

    java文件如何统计字母出现的次数和百分比

    这篇文章主要介绍了java文件如何统计字母出现的次数和百分比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java中hashCode方法与equals方法的用法总结

    java中hashCode方法与equals方法的用法总结

    总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复
    2013-10-10
  • Java 高并发六:JDK并发包2详解

    Java 高并发六:JDK并发包2详解

    本文主要介绍Java高并发这里整理了详细资料,并讲解了 1. 线程池的基本使用 2. 扩展和增强线程池 3. ForkJoin的知识,有兴趣的小伙伴可以参考下
    2016-09-09
  • java反编译工具jd-gui-osx for mac M1芯片无法使用的问题及解决

    java反编译工具jd-gui-osx for mac M1芯片无法使用的问题及解决

    这篇文章主要介绍了java反编译工具jd-gui-osx for mac M1芯片无法使用的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • spring-boot集成spring-security的oauth2实现github登录网站的示例

    spring-boot集成spring-security的oauth2实现github登录网站的示例

    本篇文章主要介绍了spring-boot集成spring-security的oauth2实现github登录网站的示例,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • java 学习笔记(入门篇)_java的安装与配置

    java 学习笔记(入门篇)_java的安装与配置

    学习Java已经很长时间了,由于基础不好遇到问题就无从下手,所以,打算写Java的随手笔记来巩固基础,加强学习,接下来讲解java的安装,配置等,感兴趣的朋友可以参考下
    2013-01-01

最新评论