【Spring-MyBatis】数据库字段下划线映射到 java 对象的驼峰式命名属性

  • Post author:
  • Post category:java


author: jwensh

date: 2022.06.26



命名规范要求

  • 数据库使用

    snake_case

    格式命名表名和字段名;
  • java 类属性使用

    camelCase

    命名属性名;

所以产生了一个问题,spring + mybatis 下如何进行 orm 内容映射



方式一:mapper 中使用 @Result 注解

	@Select("SELECT * FROM driver_api where is_available = 1 ORDER BY ename ASC")
    @Results({
        @Result(column = "api_name", property = "apiName" )
    })
    List<DriverApiDO> getAllDriverApi();
  • 在进行 sql 查询和初始化实体时 mybatis 会自动转化,写 sql 语句的时候也不必为有下划线的字段设置与实体类相同的别名;
  • 如未加配置之前的 sql 查询语句为:

    select id, driver_api as driverApi from driver_api



方式二:mybatis-config.xml 配置文件

在 spring 项目下 mybatis-config.xml 配置文件中添加如下设置:

<?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>
        <!-- 设置启用数据库字段下划线映射到java对象的驼峰式命名属性,默认为false -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

或者是在 spring-boot 项目下的配置文件中:

mybatis.configuration.mapUnderscoreToCamelCase = true
或者
mybatis.configuration.map-underscore-to-camel-case = true

在 mybatis 的配置文件里加入如上的配置,就基本不用 xml 中进行字段和实体和属性的映射;

备注:

resultMap 中的 property 属性或别名要和对象中属性的名字相同,但是实际匹配是,MyBatis 会先将两者都转换为大写形式,然后再判断是否相同,即 property=“userName” 和 property=“username” 都可以匹配到对象 userName 属性上。



参考

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html



版权声明:本文为u013948858原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。