Mybatis中关于表的一对一查询01

现在我们有两张表

一张是用户表 一张是账户表

我们期望输出每一个账户的时候 输出这个账户对应的用户

user表

在这里插入图片描述

account表

在这里插入图片描述

解决思路

首先我们得写出sql语句,只要写完这个其他的都只是配置问题罢了

SELECT u.*,a.MONEY,a.ID aid,a.UID FROM account a
INNER JOIN `user` u
HAVING a.UID=u.id;

其次我们有两条路可以走

第一种方法

是再创建一个类 就像对应我们的用户表和账户表一样

写出我们所需要的字段,然后添加getter,setter等等

因为这种方法不常用 毕竟我们不可能为了执行一个查询 就创建一个类

如果这样做 最后会有一堆类 显得繁杂

这里就不演示了

因为跟我们之前配置用户类 账户类是相同的操作

第二种方法

我们只需要在配置文件中 配置一个名为resultMap的标签 来帮我们完成映射

回顾一下

我们之前的写法是写一个resultType

就像下面这样

<select id="selectAll" resultType="com.tubai.domain.Account">
    select * from account;
</select>
前期准备

在配置resultMap前 我们先做一点准备

我们得先在Account类中添加一个属性

//用来与用户类建立联系
private User user;

并添加getter和setter

resultMap的写法
<!--这的id是一个标识,等会下面的resultMap属性就填这的id-->
<!--type是类的完全限定名, 或者一个类型别名。
用于指定封装的类型-->
<resultMap id="userAccountMapper" type="com.tubai.domain.Account">
    <!--property放java中写的属性 而colunm则是数据库的列名-->
    <!--id是当前命名空间中的一个唯一标识,用于标识一个结果映射。因此我们一般放主键-->

    <id property="ID" column="aid"></id>
    <!--而result用于放其他字段-->
    <result property="UID" column="uid"></result>
    <result property="money" column="money"></result>
    <!--根据uid映射到user的各个属性-->
    <!--javaType是一个 Java 类的全限定名,或一个类型别名-->
    <!--association是一个复杂类型的关联;许多结果将包装成这种类型-->
    <association property="user" column="uid" javaType="com.tubai.domain.User">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="sex" column="sex"></result>
        <result property="address" column="address"></result>
        <result property="birthday" column="birthday"></result>
    </association>
</resultMap>
<select id="selectAllWithUser" resultMap="userAccountMapper">
    SELECT u.*,a.MONEY,a.ID as aid,a.UID FROM account a
    INNER JOIN `user` u
    HAVING a.UID=u.id;
</select>

具体解释请移步官方文档:
https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps

通过以上配置 我们就成功的完成了表的一对一查询

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值