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

2023-08-06 0 4,647

目录

问题的提出

今天我在测试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”了。

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 mybatisplus驼峰命名映射的问题解决 http://www.20zxx.cn/806656/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务