项目踩坑之MyBatis 转换大小写问题

当Windows环境下MySQL数据库不区分大小写,且数据库字段使用下划线命名,而实体类采用驼峰式命名时,MyBatis可能出现错误。解决方法包括:1. 使用resultMap映射;2. 配置MyBatis,如在mybatis-config.xml或application.yml中设置map-underscore-to-camel-case;3. 自定义配置类。前两种配置同时存在时,后者优先。详情可参考相关博客链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目踩坑之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/qq_38738510/article
第三种方式参考博客:https://blog.csdn.net/liu_sisi/article/details/88360155

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值