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 + "\r\n"
               + "name : " + name + "\r\n"
               + "url : " + url + "\r\n"
               + "age : " + age + "\r\n"
               + "country : " + country + "\r\n"
               + "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>
posted @ 2021-11-05 19:16  俊king  阅读(49)  评论(0编辑  收藏  举报