实体类属性名和数据库字段名不对应的两种解决方法

id uesrname birthday sex address
42 小二王 2018-03-02 15:09:37 北京金燕龙
43 小二王 2018-03-04 11:34:34 北京金燕龙
46 老王 2018-03-07 17:37:26 北京
48 小马宝莉 2018-03-08 11:44:00 北京修正
51 hehehehe 2020-03-22 09:16:43 中国

java实体类:

package com.oylong.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;
    ......
}

假如我们按照以下的语句去查询

<select id="findAll" resultType="com.oylong.domain.User">
    select * from user
</select>

那么会得到如下结果

字段和属性名不对应结果.png

解决方式如下

  • 第一种,直接修改sql语句
<select id="findAll" resultType="com.oylong.domain.User">
    select id as userId,username as userName,birthady as userBirthday, sex as userSex, address as userAddress from user
</select>

修改后得到正确结果
修正1.png

  • 第二种,在映射配置文件中,添加对应关系,然后在select标签中,添加resultmap属性值
<resultMap id="userMap" type="com.oylong.domain.User">
    <id property="userId" column="id"  ></id>
    <result property="userName" column="username"></result>
    <result property="userAddress" column="address"></result>
    <result property="userSex" column="sex"></result>
    <result property="userBirthday" column="birthday"></result>
</resultMap>

<select id="findAll" resultMap="userMap">
        select * from user
</select>

这样同样可以得到正确结果。两种方法各有利弊,第一种执行效率高,但是需要改很多的sql语句;第二种执行效率低,但是可以提高开发效率。

最后修改:2020 年 03 月 26 日
如果觉得我的文章对你有用,请随意赞赏