什么是关联关系?
关联关系是指类之间的引用关系,如果类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)及对应生成关系
<resultMap id="BaseResultMap" type="com.zking.ssm.book.model.New" >
<constructor >
<idArg column="news_id" jdbcType="INTEGER" javaType="java.lang.Integer" />
<arg column="title" jdbcType="VARCHAR" javaType="java.lang.String" />
</constructor>
</resultMap>
<resultMap id="New" type="com.zking.ssm.book.model.New">
<id property="newsId" javaType="java.lang.Integer" column="news_id"/>
<result property="title" javaType="java.lang.String" column="title"/>
<collection property="categories" ofType="com.zking.ssm.book.model.Category">
<id property="categoryId" javaType="java.lang.Integer" column="category_id"/>
<result property="categoryName" javaType="java.lang.String" column="category_name"/>
</collection>
</resultMap>
<sql id="Base_Column_List" >
news_id, title
</sql>
<select id="selectNewCategory" resultMap="New">
select
n.*,c.* from
t_news n,t_category c,t_news_category nc
where n.news_id=nc.nid
and c.category_id=nc.cid
</select>
3.修改Customer、Order实体类
1)实现序列化接口
2)建立实体映射关联关系(一对多、多对一)
#一对多:一个客户对应多个订单
private List<Order> orders=new ArrayList<Order>();
#多对一:多个订单对应一个客户(一个订单对应一个客户)
private Customer customer;
4.配置mybatis关联映射
4.1 一对多
<resultMap id="one2many" type="Customer">
<id column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
<!-- 一对多的关系 -->
<!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
<collection property="orders" ofType="Order">
<id column="order_id" property="orderId"/>
<result column="order_no" property="orderNo"/>
</collection>
</resultMap>
注意事项,使用左外连接而非内连接!!!
4.2 多对一
<resultMap id="many2one" type="Order">
<id column="order_id" property="orderId"/>
<result column="order_no" property="orderNo"/>
<result column="cid" property="cid"/>
<!-- 多对一的关系 -->
<!-- property: 指的是属性的值, javaType:指的是属性的类型-->
<association property="customer" javaType="Customer">
<id column="customer_id" property="customerId"/>
<result column="customer_name" property="customerName"/>
</association>
</resultMap>