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

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

相关文章

  • java实现远程桌面的实例代码

    java实现远程桌面的实例代码

    下面小编就为大家分享一篇java实现远程桌面的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • SpringCloud让微服务实现指定程序调用

    SpringCloud让微服务实现指定程序调用

    这篇文章主要介绍了SpringCloud让微服务实现指定程序调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java如何使用HTTPclient访问url获得数据

    Java如何使用HTTPclient访问url获得数据

    这篇文章主要介绍了Java使用HTTPclient访问url获得数据的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 自定义mybatis插件如何实现sql日志打印

    自定义mybatis插件如何实现sql日志打印

    这篇文章主要介绍了自定义mybatis插件如何实现sql日志打印问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Java设计模式之命令模式(Command模式)介绍

    Java设计模式之命令模式(Command模式)介绍

    这篇文章主要介绍了Java设计模式之命令模式(Command模式)介绍,本文讲解了Command模式的定义、如何使用命令模式等内容,需要的朋友可以参考下
    2015-03-03
  • java 代理模式及动态代理机制深入分析

    java 代理模式及动态代理机制深入分析

    这篇文章主要介绍了java 代理模式及动态代理机制深入分析的相关资料, 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问,需要的朋友可以参考下
    2017-03-03
  • 微服务架构设计RocketMQ进阶事务消息原理详解

    微服务架构设计RocketMQ进阶事务消息原理详解

    这篇文章主要介绍了为大家介绍了微服务架构中RocketMQ进阶层面事务消息的原理详解,有需要的朋友可以借鉴参考下希望能够有所帮助
    2021-10-10
  • Java中设置JAVA_HOME无效的解决方法

    Java中设置JAVA_HOME无效的解决方法

    最近遇到一个问题,就是配置JAVA_HOME无效,不管怎么改,运行Java -version始终是最初的那个java版本,所以这篇文章主要给大家介绍了关于Java中设置JAVA_HOME无效的解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • java模拟微信抢红包的实例代码

    java模拟微信抢红包的实例代码

    现在抢红包的功能很受欢迎,本篇文章主要介绍了java模拟微信抢红包的实例代码。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 关于Filter中获取请求体body后再次读取的问题

    关于Filter中获取请求体body后再次读取的问题

    这篇文章主要介绍了关于Filter中获取请求体body后再次读取的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论