zoukankan      html  css  js  c++  java
  • 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);
        }
    } 
    
  • 相关阅读:
    Web测试与App测试的区别-总结篇
    Shell之基本用法
    Samba服务部署
    Linux基础(3)
    linux基础(2)
    linux基础(2)
    Linux基础(1)
    网络基础及网络协议
    操作系统简介
    计算机基础重要性
  • 原文地址:https://www.cnblogs.com/Ryuichi/p/13371303.html
Copyright © 2011-2022 走看看