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

iduesrnamebirthdaysexaddress
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北京修正
51hehehehe2020-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语句;第二种执行效率低,但是可以提高开发效率。

Last modification:March 26, 2020
If you think my article is useful to you, please feel free to appreciate