• Mybatis的输出结果封装


    resultType属性可以指定结果集的类型,它支持基本类型和实体类类型。

    需要注意的是,它和parameterType一样,如果注册过类型别名的,可以直接使用别名。

    没有注册过的必须使用全限定类名。

    同时,当是实体类名称是,还有一个要求,实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装。

    当实体类属性和数据库表的列名不一致时:

    修改实体类代码:(此时的实体类属性和数据库表的列名已经不一致了)

    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.itheima.domain.User">

      select * from user

    </select>

     执行查询后的结果:

    为什么名称会有值呢?

     因为 mysql在windows系统中不区分大小写! LInux系统下严格区分大小写

    解决思路一:使用别名进行查询

    此时 若修改映射配置   使用别名进行查询

    <!-- 配置查询所有操作 --> 
    <select id="findAll" resultType="com.itheima.domain.User">
      select id as userId,username as userName,birthday as userBirthday, sex as userSex,address as userAddress from user
    </select>

    此时可以将结果正常封装进去

     解决思路二:resultMap结果类型

    resultMap标签可以建立  查询的列名  和  实体类的属性名称  不一致时  建立对应关系。从而实现封装。

     在select标签中使用resultMap属性指定引用即可。

     同时resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list  实现一对一查询和一对多查询。

     定义resultMap

      resultMap标签中:

        type属性:指定实体类的全限定类名

        id属性:给定一个唯一标识,是给查询select标签引用用的。

      id标签:用于指定主键字段

      result标签:用于指定非主键字段

        column属性:用于指定数据库列名

        property属性:用于指定实体类属性名称

     <!--配置 查询结果的列名 和 实体类的属性名 之间的对应关系-->
        <resultMap id="userMap" type="com.itheima.domain.User">
            <!--主字段的对应-->
            <id property="UserID" column="id"></id>
            <!--非主字段的对应-->
            <result property="userName" column="username"></result>
            <result property="userBirthday" column="birthday"></result>
            <result property="userSex" column="sex"></result>
            <result property="userAddress" column="address"></result>
        </resultMap>

    映射配置

    <select id="findAll" resultMap="userMap">
           select * from user
    </select>
  • 相关阅读:
    yum命令速查
    5分钟理解编译系统
    Nginx(一)安装及启停
    Linux时间命令
    常用七种排序的python实现
    python迭代器、生成器、装饰器
    LeetCode【第217题】Contains Duplicate
    LeetCode【第1题】Two Sum
    python【第二十篇】Django表的多对多、Ajax
    不要问我DO在哪里?
  • 原文地址:https://www.cnblogs.com/mkl7/p/10741705.html
Copyright © 2020-2023  润新知