数据库中: 多个表之间关系靠外键, 外键设计
- 一对一关联关系: 外键可以加在任何一的一方, 需要在外键添加一个唯一约束
- 一对多关联关系: 外键可以加在任何多的一方
- 多对多关联关系: 需要中间表, 维护两个外键, 这个外键一般添加联合主键
java实体类设计: 类之间之间关系靠关联属性,
类的设计中, 关联属性两种情况
- 单个关联属性
- 集合关联属性
需求: 根据用户id查询用户信息以及订单信息
sql有两种方式:
1.分多条sql语句查询
2.使用表关联查询
select * from tb_user u join tb_order o
on u.id = o.userid
where u.id = 4;
使用表关联查询
编写UserMapper接口
编写sql映射文件 UserMapper.xml
进行属性映射
<!--手动映射-->
<resultMap id="userBaseMap" type="User">
<!--User类映射-->
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="password"/>
<result column="sex" property="sex"/>
<result column="brithday" property="brithday"/>
<result column="address" property="address"/>
</resultMap>
<resultMap id="userOrderMap" type="User" extends="userBaseMap">
<!--关联属性的映射
集合的关联属性 collection标签来映射
collection属性:
property: 关联属性名
javaType: 关联属性的数据类型 不写
ofType: 集合关联属性的元素的类型, 映射那个对象 必须
-->
<collection property="orders" ofType="Order">
<!--字段与关联属性对象的属性的映射-->
<id property="id" column="id"/>
<result property="userId" column="userid"/>
<result property="createtime" column="createtime"/>
<result property="state" column="state"/>
</collection>
</resultMap>