zoukankan      html  css  js  c++  java
  • 11.04Mybatis resultMap元素

    11.04Mybatis resultMap元素

    resultType和resultMap的区别

    • 返回类型是resultTypeMybatis会自动把对应的值赋给resultType所指定的对象的属性

    • 返回类型是resultMapMybatis会将数据库中的列数据复制到对应的相应属性上。--->用于复制查询

    resultTperesultMap不能同时使用

    resultMap元素的构成

    <resultMap id="" type="">
       <constructor><!-- 类再实例化时用来注入结果到构造方法 -->
           <idArg/><!-- ID参数,结果为ID -->
           <arg/><!-- 注入到构造方法的一个普通结果 -->
       </constructor>
       <id/><!-- 用于表示哪个列是主键 --> <!-- 该元素有属性 -->
       <result/><!-- 注入到字段或JavaBean属性的普通结果 --> <!-- 该元素有属性 -->
       <association property=""/><!-- 用于一对一关联 -->
       <collection property=""/><!-- 用于一对多、多对多关联 -->
       <discriminator javaType=""><!-- 使用结果值来决定使用哪个结果映射 -->
           <case value=""/><!-- 基于某些值的结果映射 -->
       </discriminator>
    </resultMap>

    标签说明:

    • <resultMap>标签的type属性表示需要POJOid属性是resultMap的唯一标识

    • 子元素<constructor>用于配置构造方法,POJO没有无参构造方法时使用

    • 子元素<id>表示哪个列是主键。允许多主键,多主键称为联合主键

    • 子元素<result>表示POJOSQL列名的映射关系

    • 子元素<association><collection><discriminator>用于级联情况

    idresult元素共有的属性:

    元素说明
    property 映射到列结果的字段或属性。如果 POJO 的属性和 SQL 列名(column元素)是相同的,那么 MyBatis 就会映射到 POJO 上
    column 对应 SQL 列
    javaType 配置 Java 类型。可以是特定的类完全限定名或 MyBatis 上下文的别名
    jdbcType 配置数据库类型。这是 JDBC 类型,MyBatis 已经为我们做了限定,基本支持所有常用数据库类型
    typeHandler 类型处理器。允许你用特定的处理器来覆盖 MyBatis 默认的处理器。需要指定 jdbcType 和 javaType 相互转化的规则

    什么是POJO

    一条SQL查询语句执行后返回结果集的一种存储方式。

    通常有两种方式:

    • Map存储

    • POJO存储

    使用Map存储结果集

    Mybatis配置:

        <!--查询所有网站的信息存储到Map中-->
       <select id="selectAllWebsite" resultType="map">
          SELECT *
          FROM javawebtest.website;
       </select>

    WebsiteMapper配置:

        /*使用Map存储结果集*/
       List<Map<String, Object>> selectAllWebsite1();

    Map 的 key 是 select 语句查询的字段名(必须完全一样),而 Map 的 value 是查询返回结果中字段对应的值,一条记录映射到一个 Map 对象中。

    缺点:

    可读性差

    POJO存储结果集

    Mybatis有自动映射,如果需要复杂的映射或级联要使用select元素的resultMap属性配置映射集合

    修改Website类不提供getset方法:

    package com.junkingboy.bean;

    import java.util.Date;

    /**
    * @description:website表的javabean对象
    * @data: 2021/10/29 16:47
    * @author: Lucifer
    */
    public class Website {
       private int id;
       private String name;
       private String url;
       private int age;
       private String country;
       private Date createtime;

       /* set和get方法 */
       
       //重写toString方法
       @Override
       public String toString(){
           return "Website : {" +
                   "id : " + id + " "
                   + "name : " + name + " "
                   + "url : " + url + " "
                   + "age : " + age + " "
                   + "country : " + country + " "
                   + "time : " + createtime + "}";
      }
    }

    WebsiteMapper自定义结果集:

        <!-- 自定义结果集类型 -->
       <resultMap id="com.junkingboy.bean.Website" type="myResult">
           <!-- property是com.junkingboy.bean.Website类中的属性 -->
           <!-- column是查询结果的列名,可以来自不同的表 -->
           <id property="id" column="id" />
           <result property="uname" column="name" />
       </resultMap>

    作用:

    这个自定义结果集的作用用于再<select>等标签下的resultMap属性当中做值。语句返回的结果会封装到POJO对象的对应属性中

    resultMap元素属性:

    • id代表resultMap标识,type标识需要映射的POJO

    • property属性指定website属性名称unamecolumn表示数据库中表的列名。将POJOSQL的查询结果一 一对应。

    WebsiteMapper的select配置:

        <!-- 使用结果集类型作为返回值的存储模型 -->
       <select id="selectAllWebsiteMyResult" resultMap="myResult">
          SELECT id, url
          FROM javawebtest.website;
       </select>
    It's a lonely road!!!
  • 相关阅读:
    C#中调用Outlook API 发起会议
    Log4Net配置
    web端调用Webapi获取Excel表格
    表格导出之Aspose.Cells
    验证输入框
    把新建的对象所有属性变成默认值
    省市区三级联动
    全局异常处理
    HttpHttpServletRequest / Reponse
    热部署
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15514867.html
Copyright © 2011-2022 走看看