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

Posted ryuichi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    }
} 





以上是关于7表的列名与实体类列名不对应,如何将查询结果封装到实体类对象中的主要内容,如果未能解决你的问题,请参考以下文章

resultMap自定义映射---8.3.1.解决列名(表中的字段名称)和实体类中的属性名不一致

04_属性名和字段名不一致

实体类 数据访问类 函数

MyBatis表和实体关联

有没有办法使用 Dapper 将列名映射到我的实体的属性?

mybatis—当表的字段名和实体类的列名不对应时的三种处理方式