11.04Mybatis resultMap元素
resultType和resultMap的区别
- 
返回类型是 resultType:Mybatis会自动把对应的值赋给resultType所指定的对象的属性
- 
返回类型是 resultMap:Mybatis会将数据库中的列数据复制到对应的相应属性上。--->用于复制查询
resultTpe和resultMap不能同时使用
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属性表示需要POJO,id属性是resultMap的唯一标识
- 
子元素 <constructor>用于配置构造方法,POJO没有无参构造方法时使用
- 
子元素 <id>表示哪个列是主键。允许多主键,多主键称为联合主键
- 
子元素 <result>表示POJO和SQL列名的映射关系
- 
子元素 <association>、<collection>和<discriminator>用于级联情况
id和result元素共有的属性:
| 元素 | 说明 | 
|---|---|
| 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类不提供get和set方法:
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方法
    
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属性名称uname,column表示数据库中表的列名。将POJO和SQL的查询结果一 一对应。
WebsiteMapper的select配置:
    <!-- 使用结果集类型作为返回值的存储模型 -->
    <select id="selectAllWebsiteMyResult" resultMap="myResult">
        SELECT id, url
        FROM javawebtest.website;
    </select>
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号