一.关联关系配置的好处
MyBatis是一个Java持久化框架,可以通过XML或注解的方式将对象与数据库的关系进行映射。在MyBatis中,可以使用不同的方式配置关联关系,包括一对多、一对一和多对多关系。接上篇的MyBatis的教学
- 数据库表之间的关联关系:在关系型数据库中,不同表之间存在一对多、一对一、多对多等关联关系。通过在MyBatis中配置关联关系,可以方便地处理这些表之间的连接和查询操作,使数据的读取和写入更加简单和高效。
- 避免手动编写复杂SQL:使用MyBatis的关联关系配置,可以避免手动编写复杂的SQL语句来处理多个表之间的关联。通过简单的配置,MyBatis可以自动处理表之间的连接查询,简化了开发者的工作量。
- 对象关系映射:MyBatis是一个对象关系映射(ORM)框架,它可以将数据库中的表与Java对象之间进行映射。配置关联关系可以帮助开发者实现对象之间的关联,提供了更加面向对象的编程方式。
- 冗余数据减少:通过合理的关联关系配置,可以避免数据的冗余存储,减少数据库的存储空间占用。同时,在查询数据时,也可以通过关联关系一次性获取到所有相关的数据,提高查询效率。
总的来说,MyBatis的关联关系配置可以帮助开发者处理多表之间的关系,提供了更方便、高效和可维护的数据操作方式,减少了手动编写复杂SQL语句的工作量,同时也符合对象关系映射的思想。
二. 导入数据库表:
在generatorConfig.xml配置文件中,配入多张表
三. 一对多关系:-- 一个订单对应多个订单项
使用嵌套查询(Nested Queries):在主对象的映射配置中使用
标签来配置关联的多个子对象。可以通过
select
语句查询子对象,并通过resultMap
将结果映射到主对象中。
我们先在orderMapper.xml中写一个根据ID查询订单的方法
创建一个orderVo
package com.zking.vo; import com.zking.model.Order; import com.zking.model.OrderItem; import java.util.ArrayList; import java.util.List; /** * @author yinzi * @create 2023-08-26 14:14 */ public class OrderVo extends Order { private List<OrderItem> orderItems=new ArrayList<>(); public List<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(List<OrderItem> orderItems) { this.orderItems = orderItems; } }
建一个resultMap的映射
接着,写biz层
package com.zking.biz; import com.zking.mapper.OrderMapper; import com.zking.vo.OrderVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @author yinzi * @create 2023-08-26 14:31 */ @Service //交给spring管理 public class OrderBizImpl implements OrderBiz { @Autowired private OrderMapper om; @Override public OrderVo selectbyOid(Integer oid) { return om.selectbyOid(oid); } }
最后测试结果
四.一对一关系:---一个订单项对应一个订单
使用嵌套查询(Nested Queries):在主对象的映射配置中使用
标签来配置关联的子对象。可以通过
select
语句查询子对象,并通过resultMap
将结果映射到主对象中。
一样,我先来配置一个查询的方法
然后写biz层
package com.zking.biz; import com.zking.mapper.OrderItemMapper; import com.zking.model.OrderItem; import com.zking.vo.OrderItemVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @author yinzi * @create 2023-08-26 15:23 */ @Service public class OrderItemBizImpl implements OrderItemBiz { @Autowired private OrderItemMapper oim; @Override public OrderItemVo selectByOrderItemId(Integer oiid) { return oim.selectByOrderItemId(oiid); } }
最后测试:
五.多对多关系(两个一对多)
使用嵌套查询(Nested Queries):在中间表的映射配置中使用
标签来配置关联的多个子对象。可以通过
select
语句查询子对象,并通过resultMap
将结果映射到中间表对象中。
老套路,先配置一个查询的方法
然后接着写biz层
package com.zking.biz; import com.zking.mapper.HBookMapper; import com.zking.vo.HBookVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @author yinzi * @create 2023-08-26 16:08 */ @Service public class HBookBizImpl implements HBookBiz { @Autowired private HBookMapper hm; @Override public HBookVo selectByBookId(Integer bid) { return hm.selectByBookId(bid); } }
最后测试结果: