mybatis 实体类字段大小写问题 字段获取不到值的解决
作者:yangniceyang 时间:2021-06-29 07:44:58
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);
}
};
}
}
来源:https://blog.csdn.net/yangniceyangyang/article/details/100113520
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringCloud Alibaba 基本开发框架搭建过程
![](https://img.aspxhome.com/file/2023/9/83579_0s.jpg)
使用java反射将结果集封装成为对象和对象集合操作
SpringBoot自动配置特点与原理详细分析
![](https://img.aspxhome.com/file/2023/7/62057_0s.jpg)
解决问题:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
![](https://img.aspxhome.com/file/2023/1/59871_0s.jpg)
Spring事务失效问题分析及解决方案
Android运行时权限终极方案(PermissionX)
![](https://img.aspxhome.com/file/2023/6/89536_0s.png)
Android使用phonegap从相册里面获取照片(代码分享)
Java使用数组实现ArrayList的动态扩容的方法
Java 如何将表格数据导入word文档中
Java多线程yield心得分享
![](https://img.aspxhome.com/file/2023/9/60589_0s.jpg)
Android应用中绘制圆形头像的方法解析
![](https://img.aspxhome.com/file/2023/8/97848_0s.png)
深入剖析Java工厂模式让你的代码更灵活
C#使用iTextSharp将PDF转成文本的方法
java程序员必须要学会的linux命令总结(推荐)
Springboot JPA 枚举Enum类型存入到数据库的操作
![](https://img.aspxhome.com/file/2023/4/60064_0s.jpg)
Java 常见的限流算法详细分析并实现
![](https://img.aspxhome.com/file/2023/3/71923_0s.png)
Java并发编程之同步容器
![](https://img.aspxhome.com/file/2023/8/70308_0s.png)
C#探秘系列(一)——ToDictionary,ToLookup
![](https://img.aspxhome.com/file/2023/2/100092_0s.png)
linux下idea、pycharm等输入中文拼音时满3个字母后无法继续拼音输入的问题
![](https://img.aspxhome.com/file/2023/8/64408_0s.png)
Android开发 OpenGL ES绘制3D 图形实例详解
![](https://img.aspxhome.com/file/2023/0/91710_0s.png)