1高级结果映射
1.1数据模型分析
1、明确每张表存储的信息
2、明确每张表中关键字段(主键、外键、非空)
3、明确数据库中表与表之间的外键关系
4、明确业务中表与表的关系(建立在具体的业务)
1.2一对一映射
1.2一对一映射
1.2一对一映射
1.2.1需求
查询订单信息,关联查询用户信息
1.2.2Sql
主信息:orders
从信息:user
SELECT
orders.`id`,
orders.`user_id`,
orders.`number`,
user.`username`,
user.`sex`
FROM
orders,
USER
WHERE orders.`user_id` = user.`id`
1.2.3resultType
1.2.3.1创建扩展类
1.2.3.2映射文件
1.2.3.3Mapper接口
1.2.3.4测试代码
1.2.3.5小结
使用resultType来进行一对一结果映射,查询出的列的个数和映射的属性的个数要一致。而且映射的属性要存在与一个大的对象中,它是一种平铺式的映射,即数据库查询出多少条记录,则映射成多少个对象。
1.2.4resultMap
使用resultMap来进行一对一结果映射,它是将关联对象添加到主信息的对象中,具体说是对象嵌套对象的一种映射方式。
1.2.4.1修改扩展类
1.2.4.2映射文件
1.2.4.3Mapper接口
1.2.4.4测试代码
1.2.5小结
在一对一结果映射时,使用resultType更加简单方便,如果有特殊要求(对象嵌套对象)时,需要使用resultMap进行映射,比如:查询订单列表,然后在点击列表中的查看订单明细按钮,这个时候就需要使用resultMap进行结果映射。而resultType更适应于查询明细信息,比如,查询订单明细列表。
1.3一对多映射
1.3一对多映射
1.3一对多映射
1.3.1需求
查询订单信息,关联查询订单明细信息及用户信息
1.3.2Sql
主信息:orders
从信息:orderdetail、user
SELECT
orders.`id`,
orders.`user_id`,
orders.`number`,
user.`username`,
user.`sex`,
orderdetail.`id` detailId,
orderdetail.`items_id`,
orderdetail.`items_num`
FROM
orders,
USER,
orderdetail
WHERE orders.`user_id` = user.`id`
AND orders.`id` = orderdetail.`orders_id`
1.3.3修改扩展类
1.3.4映射文件
1.3.5Mapper接口
1.3.6测试代码
1.4多对多映射
1.4多对多映射
1.4多对多映射
多对多映射是一对多映射的特例
1.4.1需求
查询用户信息,关联查询该用户购买的商品信息
1.4.2Sql
主信息:user
从信息:items、orders、orderdetail
SELECT
orders.`id`,
orders.`user_id`,
orders.`number`,
user.`username`,
user.`sex`,
orderdetail.`id` detailId,
orderdetail.`items_id`,
orderdetail.`items_num`,
items.`name`,
items.`price`
FROM
orders,
USER,
orderdetail,
items
WHERE orders.`user_id` = user.`id`
AND orders.`id` = orderdetail.`orders_id`
AND orderdetail.`items_id` = items.`id`
1.4.3修改po类
在User类中添加List orders;
在Orders类中添加List detailList;
在Orderdetail中添加Items items;
1.4.4Mapper接口
1.4.5映射文件
1.4.6测试代码
over~~~