7、表的列名与实体类列名不对应,如何将查询结果封装到实体类对象中

解决方法:
(1)SQL语句用as关键字给列名取别名
(2)用MyBatis提供的ResultMap标签建立实例类与表之间的关系
总结:第一种方法在SQL语句的层面上解决问题,效率高,复用性差,第二种反之;

表结构

实体类属性

    private Integer userId;
    private String username;
    private Date UserBirthday;
    private String UserGender;
    private String UserAddress;

表的列名与实体类的属性不对应

as关键字取别名
接口方法

/**
 * 用as关键字取别名,建立列名与属性之间的对应关系
 */
List<User> findAll();

映射文件

<!--列名username与属性名userName只是大小写问题,mysql数据库在windows下是不区分大小写的
所以不用起别名-->
<select id="findAll" resultType="com.example.pojo.User">
    SELECT id as userId, username, birthday as userBirthday, gender as userGender, address as userAddress FROM user
</select>

测试

@Test
public void TestFindAll(){
    List<User> users = userMapper.findAll();
    for (User user: users
         ) {
        System.out.println(user);
    }
}

通过ResultMap与实体类属性建立关系

接口

/**
 * 通过resultMap与实体类建立关系
 */
List<User> findAll2();

映射文件

<!--id为resultMap的唯一标识
type属性指定将该对应关系赋给哪个实体类
username从忽略大小的角度来说该属性与列名是对应的,所以不用设置对应关系
-->
<resultMap id="userResultMap" type="com.example.pojo.User">
    <!--id标签说明该字段是主键,property是java中的属性名
        column是表中列名
    -->
    <id property="userId" column="id"/>
    <result property="userBirthday" column="birthday"/>
    <result property="userGender" column="gender"/>
    <result property="userAddress" column="address"/>
</resultMap>
<!--通过resultMap属性引用resultMap封装结果集-->
<select id="findAll2" resultMap="userResultMap">
    SELECT id, username, birthday, gender, address FROM user
</select>

测试

@Test
public void TestFindAll2(){
    List<User> users = userMapper.findAll2();
    for (User user: users
         ) {
        System.out.println(user);
    }
} 
原文地址:https://www.cnblogs.com/Ryuichi/p/13371303.html