用于多表的查询的xml的写法理解总结

mybatis配置文件里一些标签和属性的总结

题记

最近在学习mybatis,学习过程中遇到很多配置文件的学习,所以在这里做一些总结和自己的理解,如若理解有误,也请大家指出。

一对多的多表查询

现在有两张表,一张是user用户表,另外一张是account账户表,直接上ER图,可以看到account表UID和user表的id产生联系
ER图
下面我们来看java实体类如何设计,User类就不说了,没有什么好讲的。主要是Account类,从表实体类里包含主表实体的对象的引用,具体就是下图红框位置,这里需要一个user成员变量
在这里插入图片描述
下面就到了最重要的配置xml部分,直接上代码

<mapper namespace="com.itheima.dao.IAccountDao">

    <!--定义封装account和user的resultMap-->
    <resultMap id="accountUserMap" type="account">
        <!--从表内容-->
        <id property="id" column="aid"></id>
        <result property="uid" column="uid"></result>
        <result property="money" column="money"></result>
        <!--配置封装user的内容,也就是从表实体所引用的主表实体-->
        <association property="user" javaType="user">
            <id property="id" column="id"></id><!--user表主键-->
            <result property="username" column="username"></result>
            <result property="address" column="address"></result>
            <result property="sex" column="sex"></result>
            <result property="birthday" column="birthday"></result>
        </association>
    </resultMap>

    <!--查询所有账户以及每个账户对应的信息-->
    <select id="findAll" resultMap="accountUserMap">
        select u.*, a.id as aid, a.uid, a.money from account a, user u where u.id = a.uid;
    </select>
</mapper>

这里的javaType属性和resultMap标签里的type属性是一个意思,都是指定实体类,不过由于主配置文件设置了别名,所以这里就不用写全限定实体类名

再对比下
红框的内容其实就是account实体类的成员变量
而蓝框的内容是user实体类的成员变量

在这里插入图片描述
property属性就是实体类里的成员变量;column属性就是表所对应的字段,这里有个比较有意思的,就是user表和account表都有id这个字段(由于在windows上不区分大小写),所以sql语句使用了取别名来防止字段名产生冲突,代码如下

<select id="findAll" resultMap="accountUserMap">
        select u.*, a.id as aid, a.uid, a.money from account a, user u where u.id = a.uid;
    </select>

多对一的多表查询

上面是查询账户以及账户所对应的用户的信息
账户和用户是多对一的关系

下面是查询用户以及用户所拥有的账户的信息
用户和账户是一对多的关系

表的关系还是参考上面的ER图,不再赘述,直接User实体类的代码,如下图:注意红框位置,这里也是,主表实体类要引用从表实体类的集合
在这里插入图片描述

我们再看xml的写法,注意resultMap,也就是红框位置
在这里插入图片描述

注意这里不再是association标签,而是collection集合标签,同时ofType属性对应着全限定类名

暂时写到这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值