什么是关联关系?
关联关系是指类之间的引用关系,如果类A与类B关联,那么类A将被定义成类B的属性。
例如:
public class Address{
private String name;
}
public class B{
private String sid;
private Float score;
private Address address;
}
关联关系的分类:一对一,一对多,多对一,多对多
一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著
多对一:一种书本类型对应多本数,例如:神话 -> 西游记、山海经、聊斋志异
多对多:永远视为两个一对多
一个人负责多个项目开发,例如:张三负责 A B C
一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发
1.将数据表导入数据库中
2.通过mybatis-generator插件生成dao、mapper、model
1)配置mybatis-generator插件生成文件位置
2)修改generatorConfig.xml配置文件的生成目录(mapper和model)及对应生成关系
3.修改Customer、Order实体类
1)实现序列化接口
2)建立实体映射关联关系(一对多、多对一)
#一对多:一个客户对应多个订单
private List orders=new ArrayList();
#多对一:多个订单对应一个客户(一个订单对应一个客户)
private Customer customer;
4.配置mybatis关联映射
4.1 一对多
<mapper namespace="com.zking.mapper.CustomerMapper" >
<!-- 定义关联关系 -->
<resultMap id="onToManey" type="com.zking.model.Customer">
<id column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
<!-- 注入多方属性-->
<collection property="listOrder" ofType="com.zking.model.Order">
<id column="order_id" property="orderId"/>
<result column="order_no" property="orderNo"/>
<result column="cid" property="cid"/>
</collection>
</resultMap>
<select id="queryAll" resultMap="onToManey">
select * from t_customer c
left join t_order o
on c.customer_id = o.cid
</select>
</mapper>
注意事项,使用左外连接而非内连接!!!
4.2 多对一
<mapper namespace="com.zking.mapper.OrderMapper" >
<!-- 定义关联关系映射 -->
<resultMap id="manyToOne" type="com.zking.model.Order">
<id column="order_id" property="orderId"/>
<result column="order_no" property="orderNo"/>
<result column="cid" property="cid"/>
<!-- 注入一方:客户 -->
<association property="customer" javaType="com.zking.model.Customer">
<id column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
</association>
</resultMap>
<select id="queryOrderByOrderId" resultType="com.zking.model.Order">
select * from t_order o
inner join t_customer c
on o.cid = c.customer_id
where o.order_id = #{orderId}
</select>
</mapper>