表之间的关系分析
表之间的关系有几种:
- 一对多
- 多对一
- 多对多
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 延迟记载
方法