MyBatis通过配置实现下划线命名法和驼峰命名法之间的自动转换

MyBatis 可以通过配置实现下划线命名法和驼峰命名法之间的自动转换。这里是详细的配置步骤:

1. 使用 MyBatis 自带的驼峰命名转换功能

MyBatis 提供了一个全局配置项,可以自动将数据库字段的下划线命名转换为驼峰命名。你可以在 MyBatis 的配置文件(如 mybatis-config.xml)中添加以下配置:

xml 复制代码
<configuration>
    <settings>
        <!-- 启用驼峰命名规则 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

2. 自定义类型转换器

如果你需要更复杂的转换逻辑,可以使用自定义类型转换器。在这种情况下,你需要实现 org.apache.ibatis.type.TypeHandler 接口。

首先,创建一个自定义的类型处理器:

java 复制代码
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CamelCaseTypeHandler extends BaseTypeHandler<String> {
    
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }

    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return underscoreToCamelCase(rs.getString(columnName));
    }

    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return underscoreToCamelCase(rs.getString(columnIndex));
    }

    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return underscoreToCamelCase(cs.getString(columnIndex));
    }
    
    private String underscoreToCamelCase(String input) {
        if (input == null) {
            return null;
        }
        StringBuilder result = new StringBuilder();
        boolean toUpperCase = false;
        for (char c : input.toCharArray()) {
            if (c == '_') {
                toUpperCase = true;
            } else {
                if (toUpperCase) {
                    result.append(Character.toUpperCase(c));
                    toUpperCase = false;
                } else {
                    result.append(c);
                }
            }
        }
        return result.toString();
    }
}

然后在 MyBatis 的 XML 配置文件中注册这个类型处理器:

xml 复制代码
<typeHandlers>
    <typeHandler handler="com.example.CamelCaseTypeHandler"/>
</typeHandlers>

3. 使用 @Results@Result 注解

如果你不想全局应用,可以在每个 Mapper 方法上使用 @Results@Result 注解来手动指定字段映射:

java 复制代码
public interface UserMapper {

    @Select("SELECT id, user_name FROM users WHERE id = #{id}")
    @Results({
        @Result(property = "id", column = "id"),
        @Result(property = "userName", column = "user_name")
    })
    User getUserById(int id);
}

这种方式适用于需要精确控制映射关系的场景。

4. 配置 ResultMap

你还可以在 XML 中配置 ResultMap

xml 复制代码
<resultMap id="userResultMap" type="User">
    <id property="id" column="id"/>
    <result property="userName" column="user_name"/>
</resultMap>

<select id="getUserById" resultMap="userResultMap">
    SELECT id, user_name FROM users WHERE id = #{id}
</select>

这是一种更传统的配置方式,适用于 XML 映射文件较多的项目。

通过以上配置,MyBatis 就能够在数据库表字段为下划线命名时,将其自动转换为 Java 对象中的驼峰命名属性。

5.在springboot的application.yml中配置

xml 复制代码
mybatis:
  configuration:
    #下划线转驼峰
    map-underscore-to-camel-case: true
相关推荐
2202_7544215410 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介12 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习13 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose15 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热17 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余18 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp18 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang21 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
bjzhang7526 分钟前
SpringBoot开发——Maven多模块工程最佳实践及详细示例
spring boot·maven·maven多模块工程
一直学习永不止步26 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表