第一节 概念
1、应用场景
2、关联关系概念说明
①数量关系
②关联关系的方向
3、创建模型
①创建实体类
②创建数据库表插入测试数据
第一节 概念
1、应用场景
前面已经使用MyBatis完成了对Emp表的CRUD操作,不管是使用SqlSession直接操作,还是使用Mapper代理方式,都只是完成了对单个数据库表的操作。这肯定是远远不够的。
在实际开发中,经常会将来自多张表的数据在一个位置显示。比如查询并显示的员工信息中会有来自部门表、岗位表的数据,而后台一般是定义一个方法: List
比如查询的考勤信息中会有来自用户表、部门表的数据,而后台一般是定义一个方法: List
在MyBatis中是如何实现对多表的查询并实现数据的组装呢?(此处就没有DML操作什么事了)。 主要可以通过两种方式来实现,以顾客表Customer和订单表Order为例进行讲解。 1)连接查询:使用MyBatis映射配置自动完成数据的组装,只需执行一条SQL语句 2)分步查询:使用MyBatis映射配置自动完成数据的组装,需执行多条SQL语句
2、关联关系概念说明
①数量关系
主要体现在数据库表中
- 一对一
- 夫妻关系,人和身份证号
- 一对多
- 用户和用户的订单,锁和钥匙
- 多对多
- 老师和学生,部门和员工
②关联关系的方向
主要体现在Java实体类中
- 双向:双方都可以访问到对方
- Customer:包含Order的集合属性
- Order:包含单个Customer的属性
- 单向:双方中只有一方能够访问到对方
- Customer:不包含Order的集合属性,访问不到Order
- Order:包含单个Customer的属性
3、创建模型
①创建实体类
public class Customer {
private Integer customerId;<br /> private String customerName;<br /> private List<Order> orderList;// 体现的是对多的关系
public class Order {
private Integer orderId;<br /> private String orderName;<br /> private Customer customer;// 体现的是对一的关系
②创建数据库表插入测试数据
CREATE TABLE t_customer
(
customer_id
INT NOT NULL AUTO_INCREMENT,
customer_name
CHAR(100),
PRIMARY KEY (customer_id
)
);
CREATE TABLE t_order
(
order_id
INT NOT NULL AUTO_INCREMENT,
order_name
CHAR(100),
customer_id
INT,
PRIMARY KEY (order_id
)
);
INSERT INTO t_customer
(customer_name
) VALUES (‘c01’);
INSERT INTO t_order
(order_name
, customer_id
) VALUES (‘o1’, ‘1’);
INSERT INTO t_order
(order_name
, customer_id
) VALUES (‘o2’, ‘1’);
INSERT INTO t_order
(order_name
, customer_id
) VALUES (‘o3’, ‘1’);
实际开发时,一般在开发过程中,不给数据库表设置外键约束。
原因是避免调试不方便。
一般是功能开发完成,再加外键约束检查是否有bug。