zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Luogu 4841 城市规划
    Luogu 4721 【模板】分治 FFT
    Luogu 4091 [HEOI2016/TJOI2016]求和
    Luogu 3723 [AH2017/HNOI2017]礼物
    FFT笔记
    Luogu 4900 食堂
    Luogu 4155 [SCOI2015]国旗计划
    Luogu 4069 [SDOI2016]游戏
    Luogu 4254 [JSOI2008]Blue Mary开公司
    Luogu 4251 [SCOI2015]小凸玩矩阵
  • 原文地址:https://www.cnblogs.com/mkl7/p/10741705.html
Copyright © 2011-2022 走看看