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版权协议,转载请附上原文出处链接和本声明。