Mybatis-解决实体类字段与数据库字段不一致的问题

Mybatis确实非常的方便,使用起来也十分的舒服,但是在使用的时候难免就会遇到一些问题,比如Java中的实体类字段名和数据库表中的字段不一致时,执行结果就会出现意外。

有如下两种类型:

1.数据库字段名和实体类字段名存在一定关系

数据库字段和实体类字段有对应关系,这里的对应关系就是数据库字段全为大写字母且单词之间用_分隔,实体类的属性名采用小驼峰式命名,一定要保证对应,例如数据库中的USER_ID对应实体类中的·userId字段。

类似于如下:
Mybatis-解决实体类字段与数据库字段不一致的问题_第1张图片
这种不对应的情况,Mybatis提供了一个自动驼峰命名规则的设置,但是默认是关闭的,所以当我们没有设置的时候,这样也是对应不上的。我们就需要在Mybatis的配置文件中添加如下配置:

<settings>
    
    <setting name="mapUnderscoreToCamelCase" value="true"/>
settings>

这里需要注意的就是settings标签的位置了,需要按照以下顺序排列,具体可参考博主的另一篇文章
Mybatis-解决实体类字段与数据库字段不一致的问题_第2张图片

当我们开启了自动驼峰命名规则之后,这种情况就会得以解决。

2.数据库字段名与实体类字段名“毫无关联”

Mybatis-解决实体类字段与数据库字段不一致的问题_第3张图片
这里的毫无关联是指字段名字不对应,而且也不存在上面的第一种情况。这种情况下,我们开启自动驼峰命名规则就不起任何作用了。

对于这种情况我们有两种解决方案:

2.1 在编写SQL语句的时候为字段起别名

举例如下:

<select id="getUserList" resultType="User">
    select USER_ID as id,USER_NAME as name,USER_PASSWORD as password from user2;
select>

但是这种解决方式还是有些不妥,万一我们的数据库字段很多,我们编写的sql就会很长,看起来就十分的冗余,于是Mybatis也有一种解决方案。

2.2 ResultMap结果集映射

举例如下:




<resultMap id="userMap" type="User">
    
    
    
    <id column="USER_ID" property="id" />
    
    
    <result column="USER_NAME" property="name" />
    <result column="USER_PASSWORD" property="password" />
resultMap>


<select id="getUserList" resultMap="userMap">
    select USER_ID,USER_NAME,USER_PASSWORD from user2;
select>

当我们这样设置之后,问题也会得到对应的解决。

博主更推荐使用这种结果集映射的方式来处理数据库字段与实体类字段不一致的情况。

你可能感兴趣的:(Mybatis,开发常见问题,框架)