第一节 概念
1、应用场景
2、关联关系概念说明
①数量关系
②关联关系的方向
3、创建模型
①创建实体类
②创建数据库表插入测试数据

第一节 概念

1、应用场景

前面已经使用MyBatis完成了对Emp表的CRUD操作,不管是使用SqlSession直接操作,还是使用Mapper代理方式,都只是完成了对单个数据库表的操作。这肯定是远远不够的。
在实际开发中,经常会将来自多张表的数据在一个位置显示。比如查询并显示的员工信息中会有来自部门表、岗位表的数据,而后台一般是定义一个方法: List findUser(conditions); 这就要求User中要包含部门Dept、岗位Position的信息; 01.概念 - 图1
比如查询的考勤信息中会有来自用户表、部门表的数据,而后台一般是定义一个方法: List findDuty(conditions) 这就要求Duty中包含用户User、部门Dept的信息。 01.概念 - 图2
在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 {

  1. 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。

回目录 下一节