(1)对本篇博客的内容有一个疑问,在写一个表的实体类后,,,,随着后续的开发,需要随时修改这个实体类???所以,这就涉及到项目的功能一开始就要规划清楚,不要随时新增或者修改需求。。。。。这样才能做好规划,进而不要任意修改已经写好的代码。。。。说多了都是泪,经验太少~~~
(2)数据库表的设计原则,设计能力有待加强。
(3)【一对多】的情况下,【多的那个表】就是【一的那个表】的“附庸”?
目录
(1)原因1:这个例子是自己的主观观点(以后,随着经验加深,回头看的时候大概率会觉得略幼稚~~~)
一:【多表关联查询】和【多表级联查询(或称对象关联查询)】的区别;【一对一】,【一对多】,【多对多】的表关系列举;
首先,因为涉及到t_goods_detail表,所以添加GoodsDetail类,添加goods_detail.xml
然后,在Goods类中,添加【List goodsDetails】→在对象层面上完成了Goods对象和GoodsDetail对象的关联
然后,为了指明【List goodsDetails】的数据来源,需要在goods.xml中进行对象关联的描述
首先,在GoodsDetail中添加Goods类型的对象→在对象层面上完成GoodsDetail对象和Goods对象的关联
然后,为了指明GoodsDetail类对象中的goods的数据来源,需要在goods_detail.xml中进行对象关联的描述
零:为什么需要本篇博客的东西
(1)原因1:这个例子是自己的主观观点(以后,随着经验加深,回头看的时候大概率会觉得略幼稚~~~)
一个例子说明:
如下:t_goods表:(在实际中,会有Goods实体类与之对应)
goods_id | title | current_price |
768 | 莫斯利安 | 78 |
769 | 安慕希 | 67 |
t_goods_detail表:(在实际中,会有GoodsDetail实体类与之对应)
gd_id | goods_id | gd_detail |
9001 | 768 | 莫斯利安描述1 |
9002 | 768 | 莫斯利安描述2 |
9003 | 769 | 安慕希描述1 |
9004 | 769 | 安慕希描述2 |
比如要查询【莫斯利安的信息和它的描述】如果采用以前的多表关联查询的策略,也就是只需要一条SQL语句就完成查询,其SQL语句大致是:
SELECT *
FROM t_goods g LEFT JOIN t_goods_detail d ON g.goods_id=d.goods_id
WHERE g.goods_id=768;
这背后其实是笛卡尔积在支撑啦,其查询的结果如下:很简单哈,这也是以前经常遇到的,比较熟悉的东西;
goods_id | title | current_price | gd_id | goods_id(1) | gd_detail |
768 | 莫斯利安 | 78 | 9001 | 768 | 莫斯利安描述1 |
768 | 莫斯利安 | 78 | 9002 | 768 | 莫斯利安描述2 |
可以发现,这个查询结果的的字段包含了两张表的字段,,,,所以,单纯用Goods实体类对象或者GoodsDetail实体类对象是不能承载这个数据的。
为了能承载存储这些数据,自然可以考虑使用以前遇到过的GoodsDAO的策略去处理(GoodsDao的例子见MyBatis入门八:多表关联查询二:ResultMap结果映射;);但是,如果继续使用MyBatis入门八:多表关联查询二:ResultMap结果映射;中的那种传统的DAO策略,就会出现这种情况:【为了能保存上面的查询结果,需要用两个GoodsDAO对象去承载存储】,而这样是不太好的。
为了,对上面DAO策略的一点小小改进,就需要抛弃上面的【
多表关联查询】策略,而是采用本篇博客的中的【多表级联查询】(或称对象关联查询)的东西了。
即基本思想就是:即,因为t_goods表和t_goods_detail表是【一对多】的关系,所以,Goods实体类就这样写。其结果就是【为了能保存上面的查询结果,只需要一个Goods对象去存储就好了】。
public class Goods {
private Integer goodsId;
private String title;
private Float currentPrice;
private List<GoodsDetail> goodsDetails;
}
当然,为了实现上面功能,需要在Mybatis中设置一下,以实现对象关联查询或称【多表级联查询】。
(2)原因2:对象关联查询可以简化工作量
通过【一对多】或者【多对一】关联查询,可以降低开发的工作量,让这些繁琐的SQL语句,让mybatis自动帮我们执行;所有的SQL放在xml中,由mybatis进行自动的管理与执行,降低了出错的风险,,提高开发效率。