Mybatis 下划线_英文 _test 与 下划线_数字 _1 等特殊字段无法映射为实体类的字段问题

一、下划线_英文 _test 无法映射为实体类的字段问题

方案一

开启驼峰命名规则映射

在MyBatis配置文件mybatis-config.xml中开启驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典Java 属性名 aColumn 的映射;代码如下:

<configuration>
    <!-- 全局配置 -->
    <settings>
        <!--开启驼峰命名规则映射 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

方案二

在mapper映射文件的< select ></ select >标签中利用resultMap处理结果映射。

方案二有点麻烦,笔者的思路是使用具有实体类映射的方法注解,去映射字段,如果有特殊的字段,如果下划线后是英文,笔者的这个注解方法映射,是可以解决的,但如果下划线后的是数字,那么就要考虑在 使用 SQL 语句时,使用 AS 关键字配置下划线后是数字的字段别名,例如特殊字段 test_1 那么就可以配置别名为 AS test_one,也就可以使用笔者之前的方法 —— 实体类映射数据库字段的注解方法。

实体类映射数据库字段的注解方法:

  1. 若依框架内的实体类映射注解方法
import org.springframework.data.mongodb.core.mapping.Field;
  1. 传统 Javax 实体类映射注解方法
import javax.persistence.Column;

具体实体类映射演示:

数据库字段:test_idtest_name

映射

实体类字段:testIdtestName

import org.springframework.data.mongodb.core.mapping.Field;
import javax.persistence.Column;
import lombok.Data;

@Data
public class TestEntity {
    
    
    /**
     * 测试编号
     */
    @Field(name = "test_id")
    private String testId;
    /**
     * 测试姓名
     */
    @Column(name = "test_name")
    private String testName;
}

二、下划线_数字 _1 等特殊字段无法映射为实体类的字段问题

从上面的方案二解释中知道,下划线_数字 名字的字段是无法被映射的,最好的方法是使用 SQL 语句中使用 关键字AS 配置字段的别名。

具体实体类映射无法映射的问题演示:

import org.springframework.data.mongodb.core.mapping.Field;
import javax.persistence.Column;
import lombok.Data;

@Data
public class TestEntity {
    
    
    /**
     * 测试1
     */
    @Field(name = "test_1")
    private String test1;
    /**
     * 测试2
     */
    @Column(name = "test_2")
    private String test2;
}

(实体类 TestEntitytest1test2值会是 null 值,无法获取到数据)

具体的 xml 文件 SQL 别名查询

<select id="testFunction" resultType="com.test.entity.TestEntity">
	SELECT test_1 AS test_one, test_2 AS test_two FROM test_table
</select>

import org.springframework.data.mongodb.core.mapping.Field;
import javax.persistence.Column;
import lombok.Data;

@Data
public class TestEntity {
    
    
    /**
     * 测试1
     */
    @Field(name = "test_one")
    private String testOne;
    /**
     * 测试2
     */
    @Column(name = "test_two")
    private String testTwo;
}

参考链接

1. 解决MyBatis不能将表中含有下划线的字段映射到实体属性的两种方案

2. mybatis+springmvc 搭建的系统——数据库带下划线的字段无法取到值

猜你喜欢

转载自blog.csdn.net/qq_42701659/article/details/132849150