关于Mybatis的resultMap用法

resultType就是把查询结果封装到pojo类型中,pojo类的属性名和数据库所对应表的字段名一致。若查询的字段和pojo的属性不一致,需要用到property属性手动配置。

例子:

DB: order表

 POJO:

// 与DB表中字段一致
private int id;
// userId字段不一致,请参照下面<result property="userId" column="user_id" />
private Integer userId; 
...

Mapper.xml文件:

配置resultMap标签,映射表字段和pojo属性名


    <!-- resultMap:填入配置的resultMap标签的id值 -->
    <select id="selectAll" resultMap="selectResultMap">
        SELECT 
            id, 
            user_id
        FROM `order`
    </select>

    <!-- type就是指定映射到哪一个pojo -->
    <!-- id:设置ResultMap的id -->
    <resultMap type="order" id="selectResultMap">
        <!-- 定义主键:如果是多个字段,则定义多个id -->
        <id property="id" column="id" />

        <!-- property:pojo中的属性名 -->
        <!-- column:   表中的列名 -->
        <!-- 定义普通属性 -->
        <result property="userId" column="user_id" />
    </resultMap>

使用resultMap进行关联查询

一对一查询:一个订单只能对应一个用户。

一个订单信息只能是一个人下的订单,从查询订单信息角度出发关联查询用户信息为一对一查询。反之,从用户信息角度出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。

POJO:

// 与DB表中字段一致
private int id;
// userId字段不一致,请参照下面<result property="userId" column="user_id" />
private Integer userId; 
// 关联User表
private User user; 
...

Mapper.xml文件:

先使用id和result标签,映射order类的结果集,然后再使用association标签关联对象User的结果集

<!-- 一对一关联,查询订单,订单内部包含用户属性 -->
<select id="selectAll" resultMap="selectResultMap">
    SELECT
    o.id,
    o.user_id,
    u.username,
    u.address
    FROM
    `order` o
    LEFT JOIN `user` u ON o.user_id = u.id
</select>

<resultMap type="order" id="selectResultMap">
    <id property="id" column="id" />
    <result property="userId" column="user_id" />

    <!-- association :配置一对一属性 -->
    <!-- property:order里面的User属性名 -->
    <!-- javaType:属性类型 -->
    <association property="user" javaType="user">
        <!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
        <id property="id" column="user_id" />
        <result property="username" column="username" />
        <result property="address" column="address" />
    </association>
</resultMap>

一对多查询:查询所有用户信息及相关订单。

POJO:

// User类
private int id;
private String username; 
private String address; 

// 关联订单表,一对多关系
private List<Order> orders;
...

 Mapper.xml文件:

先使用id和result配置映射User类的结果,然后使用collection标签配置Order结果

<!-- 一对多关联,时查询该用户下的订单 -->
<select id="queryUserOrder" resultMap="userOrderResultMap">
    SELECT
        u.id,
        u.username,
        u.address,
        o.id oid,
        o.user_id
    FROM
        `user` u
    LEFT 
        JOIN `order` o 
    ON 
        u.id = o.user_id
</select>

<resultMap type="user" id="userOrderResultMap">
    <id property="id" column="id" />
    <result property="username" column="username" />
    <result property="address" column="address" />

    <!-- 配置一对多的关系
        property:填写pojo类中集合类类属性的名称
        javaType:填写集合类型的名称 
    -->
    <collection property="orders" javaType="list" ofType="order">
        <!-- 配置主键,是关联Order的唯一标识 -->
        <id property="id" column="id" />
        <result property="userId" column="user_id" />
    </collection>
</resultMap>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值