MyBatis中数据库字段名与实体类属性名不一致

1. MyBatis 中数据库字段名与实体类属性名不一致

在使用 MyBatis 来持久化数据库时,有时候会碰到数据库中表中的字段与 Java 实体类中属性名不一致的情况,在这种情况下 MyBatis是不能完成字段的自动映射的。而通常情况下,数据库及实体类是不应该被改的的。所以要在不改变数据库以及实体类的情况下解决这个问题,下面是解决该问题的三种方式

public class User {

	private Long id;
	
	private String userName;
	
	private String passWord;
	
	......
}

1.1. 起别名

<select id="selectUserById" resultType="User">
	SELECT
        id,
        user_name as userName,<!--不用在意大小写,Mybatis 会先转换成大写再进行匹配  -->
        user_password as passWord,
	FROM user
        WHERE id = #{id}
</select>

1.2. resultMap 可以指定映射关系

<resultMap type="User" id="UserResultMap">
		<id column="id" property="id"/>
		<result column="user_name" property="userName"/>
		<result column="user_password" property="userPassword"/>
</resultMap>
	
	
<select id="selectUserById" resultMap="UserResultMap">
	SELECT 
        id,
        user_name,
        user_password,
    FROM user
        WHERE id = #{id}
</select>
  • 使用 resultMap 时,在 select 语句配置中,要有 resultMap 替换原来的 resultType
  • resultMap 中的 column 要与查询到的字段名一致,property 要与实体类的属性一致

1.3. 驼峰命名

这种情况下,MyBatis 提供了一个全局属性 mapUnderscoreToCamelCase 来解决两者名字不一致的问题

<settings>
	<!--其他配置...  -->
	<setting name="mapUnderscoreToCamelCase" value="true"/>
	<!--其他配置...  -->
</settings>
  • 因为该属性是全局属性,所以需要配置在 MyBatis 的配置文件中,而不是 Mapper.xml 映射文件中

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