Mybatis表之间的关系分析 注解开发 @One @Many介绍 一对一 一对多

2020-03-05 14:14:31 浏览数 (2)

表之间的关系分析

表之间的关系有几种:

  • 一对多
  • 多对一
  • 多对多

mybatis中的多表查询:

一对多
代码语言:javascript复制
实例:用户和账户
	一个用户可以有多个账户
	一个账户只能属于一个用户(多个账户也可以属于同一个用户)
步骤:
	1.建立两张表:用户表,账户表
		让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
	2.建立两个实体类:用户实体和账户实体类
		让用户和账户的实体类能体现出来一对多的关系
	3.建立两个配置文件
		用户的配置文件
		账户的配置文件
	4.实现配置:
		当我们查询用户时,可以同时得到用户下所包含的账户信息
		当我们查询账户时,可以同时得到账户的所属用户信息

这里不好阐述代码,把配置sql语句写出来供大家参考

代码语言:javascript复制
		<!--定义封装account和user的resultMap-->
    <resultMap id="accountUserMap" type="com.bruce.domain.Account">
        <id property="id" column="aid"></id>
        <result property="uid" column="uid"></result>
        <result property="money" column="money"></result>
        <!--一对一的关系映射:配置封装user的内容
        javatype指定封装到哪个对象-->
        <association property="user" column="uid" javaType="com.bruce.domain.User">
            <id property="id" column="id"></id>
            <result column="username" property="username"></result>
            <result column="address" property="address"></result>
            <result column="sex" property="sex"></result>
            <result column="birthday" property="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>

    <!-- 配置查询所有 -->
    <select id="findAllAccount" resultType="com.bruce.domain.AccountUser">
        select a.*,u.username,u.address from account a , user u where u.id=a.uid
    </select>
多对多
代码语言:javascript复制
实例:用户和账户
	一个用户可以有多个角色
	一个角色可以赋予多个用户
步骤:
	1.建立两张表:用户表,账户表
		让用户表和角色表之间具备多对多的关系:需要使用中间表,中间表中包含各自的主键,在中间表中是外键。
	2.建立两个实体类:用户实体和账户实体类
		让用户和角色的实体类能体现出来多对多的关系
		各自包含对方一个集合引用
	3.建立两个配置文件
		用户的配置文件
		角色的配置文件
	4.实现配置:
		当我们查询用户时,可以同时得到用户下所包含的角色信息
		当我们查询角色时,可以同时得到角色的所赋予的用户信息

@One @Many介绍

LAZY延迟加载,EAGER立即加载,

一对多,多对多:通常情况下我们都是采用延迟加载 多对一,一对一:通常情况下我们都时采用立即加载

一对一 @One 立即记载

方法

一对多 @Many 延迟记载

方法

0 人点赞