mybatis 实体类字段大小写问题 字段获取不到值的解决

目录
  • mybatis实体类字段大小写问题 字段获取不到值
    • 解决办法
    • 推断
  • 踩坑mybatis 转换大小写问题
    • 解决方法

mybatis实体类字段大小写问题 字段获取不到值

由于前期设计问题,项目中需要用到的一个字段 rootpath,所以我再实体层加了这么一个字段。

然后,我在前台向后台传数据的时候,这个rootpath一直都获取不到值。经过排查对比,发现我写的set和get方法名称后面的RootPath 中的P字母大写导致的。

解决办法

将set和get方法后面的P改为小写p就可以了

推断

mybatis认为rootpath是一个单词,但是我错误的认为了是两个单词,然后再写set和get的时候给P大写了,所以导致了字段获取不到值!

踩坑mybatis 转换大小写问题

由于在Windows环境下MySQL数据库不严格区分大小写,所以我们在对数据库的表和字段进行命名时两个单词之间都是使用下划线“_”的,比如“user_name”。但是,我们在项目开发时,为了遵守代码规范,实体类中的属性采用的都是驼峰式命名。这样,MyBatis可能就会报错没有该属性的get和set方法。

解决方法

1.使用resultMap

通过resultMap中的column值(数据库字段名)和property值(实体类属性名)进行一一映射。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.domain.User">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="user_name" jdbcType="VARCHAR" property="userName" />
    <result column="password" jdbcType="VARCHAR" property="password" />

  </resultMap>
  <select id="xxx" parameterType="xxx" resultMap="BaseResultMap" >
  ......
  </select>

2.对MyBatis进行配置:

(1)在mybatis-config.xml配置文件中添加以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<configuration>
 <!-- 配置mybatis自动转换为驼峰命名 -->
 <settings>
  <setting name="mapUnderscoreToCamelCase" value="true" />
 </settings>
</configuration>

(2) 在application.yml文件中进行配置:

#mybatis配置
mybatis:
 configuration:
   map-underscore-to-camel-case: true

其中的map-underscore-to-camel-case也可以写成mapUnderscoreToCamelCase(未尝试),然后MyBatis的xml文件中直接使用对应的实体类来接收数据。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
  <select id="xxx" parameterType="xxx" resultType="User" >
  ......
  </select>

第(1)种方式和第(2)种方式同时配置时,第(2)种方式的优先级更高。

3.自定义配置类的方式配置:给容器中添加一个ConfigurationCustomizer。

@Configuration
public class MyBatisConfig {
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return new ConfigurationCustomizer() {
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                configuration.setMapUnderscoreToCamelCase(true);
            }
        };
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis查询时,区分大小写操作

    登陆的时候,发现输入账号的不同大小写竟然能够登陆. Mybatis查询代码如下 <select id="selectById" parameterType="java.lang.String" resultType="com.deep.web.func.entity.UserData"> select <include refid="sql_columns" /> from <include re

  • mybatis使用resultMap获取不到值的解决方案

    mybatis resultMap获取不到值 <resultMap type="com.fc.model.Shop" id="employeeMap"> <id column="shop_id" property="shopId"></id> <result column="name" property="name"></result

  • 解决mybatis用Map返回的字段全变大写的问题

    mybatis通常情况都是用javabean作为resultType的对象,但是有时也可以使用Map去接收. <select id="execute" parameterType="String" resultType="java.util.HashMap"> ${value} </select> 如果使用Map,返回来的字段名全是大写,处理方法 Select name as "name" from v

  • mybatis 实体类字段大小写问题 字段获取不到值的解决

    目录 mybatis实体类字段大小写问题 字段获取不到值 解决办法 推断 踩坑mybatis 转换大小写问题 解决方法 mybatis实体类字段大小写问题 字段获取不到值 由于前期设计问题,项目中需要用到的一个字段 rootpath,所以我再实体层加了这么一个字段. 然后,我在前台向后台传数据的时候,这个rootpath一直都获取不到值.经过排查对比,发现我写的set和get方法名称后面的RootPath 中的P字母大写导致的. 解决办法 将set和get方法后面的P改为小写p就可以了 推断 m

  • mybatis实体类字段大小写及字段获取不到值问题

    目录 mybatis实体类字段大小写及字段获取不到值 问题 解决办法 推断 mybatis下部分字段值无法获取(null) 解决之前 解决方法 mybatis实体类字段大小写及字段获取不到值 问题 由于前期设计问题,项目中需要用到的一个字段 rootpath,所以我再实体层加了这么一个字段. 然后,我在前台向后台传数据的时候,这个rootpath一直都获取不到值.经过排查对比,发现我写的set和get方法名称后面的RootPath 中的P字母大写导致的. 解决办法 将set和get方法后面的P改

  • Mybatis实体类对象入参查询的笔记

    目录 Mybatis实体类对象入参查询 测试实体类对象结构如下 测试文件内容 Mybatis中的参数深入 一.mybatis的参数 parameterType参数 二.mybatis的输出结果的封装 resultType(输出类型) Mybatis实体类对象入参查询 测试实体类对象结构如下 /** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public class Vendor {

  • SpringBoot 返回Json实体类属性大小写的解决

    目录 返回Json实体类属性大小写问题 Json转换大小写的坑 返回Json实体类属性大小写问题 总归上述问题Rt,其实今天开发刚遇到,当时找了半天为啥前台传参后台却接收不到,原来是返回的时候返回小写,但是前台依旧大写传参. 查了很多后发现其实是json返回的时候把首字母变小写了,也就是Spring Boot中Jackson的功劳 百度后得@JsonProperty注解完美解决.但与此同时会出现两个问题 如果注解放到属性上,则返回的时候既有大写也有小写, @JsonProperty("Ao&qu

  • Mybatis实体类和表映射问题(推荐)

    本文是小编给大家带来的mybatis中实体类和表映射问题的知识,学习本教程能够快速帮助我们解决字段名与实体类属性名不相同的冲突问题,需要的朋友一起看看吧! 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('a

  • Mybatis实体类属性与数据库不一致解决方案

    当实体类属性和数据库不一致时,使用mybatis查询数据库返回实体类自动封装就会出现问题.针对这种情况,有两种解决方案. 1.使用别名查询 <!-- 配置查询所有操作 --> <select id="findAll" resultType="com.itheima.domain.User"> select id as userId,username as userName,birthday as userBirthday, sex as us

  • mybatis-plus实体类中出现非数据库映射字段解决办法

    在使用mybatis 或者其它mybatis的二次开发框架时(例如mybatis-plus),有时候数据库中的字段和实体类中的字段可能不一致.例如数据库中只有3个字段,而实体类中除了数据库中对应映射的三个字段以外还有多余的其余字段,例如实体类中有5个字段.那么运行就会报错 如果需要在mybatis映射实体类中加入非数据库映射字段.那么可以使用@TableField(exist = false)进行标识对应字段不属于数据库的映射字段即可. 当然可以点击进入@TableField(exist = f

  • Mybatis之映射实体类中不区分大小写的解决

    目录 Mybatis 映射实体类中不区分大小写 解决办法 问题解决 Mybatis的一些小细节 问题一. #{}和${}的区别是什么? 问题二. 当实体类中的属性名和表中的字段名不一样,怎么办 问题三. 模糊查询like语句该怎么写 问题四. 通常一个Xml映射文件 问题五. Mybatis是如何将sql执行结果封装为目标对象并返回的 问题六. 如何获取自动生成的(主)键值 问题七. 在mapper中如何传递多个参数 问题八. Mybatis动态sql是做什么的 问题九. Mybatis的Xml

  • Mybatis如何自动生成数据库表的实体类

    第一步引入jar 第二步,配置文本文件 # 数据库驱动jar 路径 本地创库的包 drive.class.path=C:/Users/Administrator/.m2/repository/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar # 数据库连接参数 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.1.188:3306/sxh

  • springboot+mybatis通过实体类自动生成数据库表的方法

    前言 本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表. 首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</ve

随机推荐