【mybatis基础】高级映射:一对一查询

本文详细介绍了MyBatis框架中的输入映射和输出映射概念,并通过具体实例讲解了一对一查询场景下如何使用resultType和resultMap完成数据映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇文章 上讲了mybatis的基本开发情况,这篇博客就说一下mybatis的映射。Hibernate有映射,同样mybatis也有映射,输入映射和输出映射。

输入映射:

parameterType:指定输入参数类型可以简单类型、pojohashmap

对于综合查询,建议parameterType使用包装的pojo,有利于系统 扩展。

 

输出映射:

resultType:查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。

reusltMap:可以通过resultMap 完成一些高级映射。如果查询到的列名和映射的pojo的属性名不一致时,通过resultMap设置列名和属性名之间的对应关系(映射关系)。可以完成映射。

 

输入映射很简单就不多说了,主要是讲解输出的映射。首先从一对一查询开始讲解。

实例需求讲解

查询订单信息同时把关联的订单的用户信息也查询出来。

订单信息与用户信息之间的关系,一对一即一个订单对应一个用户信息(单项关联是一对一)。

 

使用resultType进行输出映射

1.创建pojo类( Orders类)

public class Orders{

    private Integer id;

 

    private Integer userId;

 

    private String number;

 

    private Date createtime;

 

    private String note;

   

    //用户信息

    private String username;

    private String sex;

    private Stringaddress;

}

说明:把查询出来的字段需要跟实体中的字段对应起来,做到名称一致。

 

2.创建mapper.xml

<!-- 查询订单关联查询用户信息 -->

<selectid="findOrdersUser"resultType="cn.itcast.mybatis.po.Orders">

SELECT

orders.*,

USER.username,

USER.sex,

USER.address

FROM

orders,

USER

WHEREorders.user_id = user.id

</select>

 

3.创建mapper.java

public interfaceOrdersMapperCustom {

 

//查询订单关联查询用户信息

publicList<OrdersCustom> findOrdersUser()throws Exception;

}

 

使用resultMap进行输出映射

1.创建pojo类( Orders类)

public class Orders{

    private Integer id;

 

    private Integer userId;

 

    private String number;

 

    private Date createtime;

 

    private String note;

   

   

    //用户信息

    private User user;

}

说明:使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

 

2.创建mapper.xml

<mappernamespace="cn.itcast.mybatis.mapper.OrdersMapperCustom">

 

<!-- 订单查询关联用户的resultMap

将整个查询的结果映射到cn.itcast.mybatis.po.Orders

 -->

<resultMaptype="cn.itcast.mybatis.po.Orders"id="OrdersUserResultMap">

<!-- 配置映射的订单信息 -->

<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id

column:订单信息的唯 一标识

property:订单信息的唯 一标识 列所映射到Orders中哪个属性

  -->

<idcolumn="id" property="id"/>

<resultcolumn="user_id" property="userId"/>

<resultcolumn="number" property="number"/>

<resultcolumn="createtime" property="createtime"/>

<resultcolumn="note" property="note"/>

 

<!-- 配置映射的关联的用户信息 -->

<!-- association:用于映射关联查询单个对象的信息

property:要将关联查询的用户信息映射到Orders中哪个属性

 -->

<associationproperty="user" javaType="cn.itcast.mybatis.po.User">

<!-- id:关联查询用户的唯 一标识

column:指定唯 一标识用户信息的列

javaType:映射到user的哪个属性

 -->

<idcolumn="user_id" property="id"/>

<resultcolumn="username" property="username"/>

<resultcolumn="sex" property="sex"/>

<resultcolumn="address" property="address"/>

 

</association>

</resultMap

<!-- 查询订单关联查询用户信息,使用resultmap -->

<selectid="findOrdersUserResultMap"resultMap="OrdersUserResultMap">

SELECT

orders.*,

USER.username,

USER.sex,

USER.address

FROM

orders,

USER

WHEREorders.user_id = user.id

</select>

</mapper>

说明:首先需要定义一个resultMap,然后编写statement,进行SQL语句的编写。

 

3.创建mapper.java

public interfaceOrdersMapperCustom {

//查询订单关联查询用户使用resultMap

publicList<Orders> findOrdersUserResultMap()throws Exception;

}

 

总结

resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。如果没有查询结果的特殊要求建议使用resultType

resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。

resultMap可以实现延迟加载,resultType无法实现延迟加载。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值