01_表之间关系分析

mybatis多表查询 - 图1表关系分类
mybatis多表查询 - 图2一对一
mybatis多表查询 - 图3比较少见,比如:公司和注册地址
mybatis多表查询 - 图4mybatis多表查询 - 图5一对一查询一对多
mybatis多表查询 - 图6常见,比如:用户和订单
mybatis多表查询 - 图7mybatis多表查询 - 图8一对一查询,一对多查询多对多
mybatis多表查询 - 图9常见,比如:学生,课程,选课表
mybatis多表查询 - 图10d多对多查询

02_关联查询之一对一查询

mybatis多表查询 - 图11mybatis多表查询 - 图12A.环境搭建
image.png

**

  1. CREATE TABLE orders(orderId BIGINT PRIMARY KEY AUTO_INCREMENT,customerNo BIGINT
  2. ,state VARCHAR(40));
  3. CREATE TABLE customer(customerId BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(60),address VARCHAR(60));
  4. ALTER TABLE orders ADD FOREIGN KEY(customerNo) REFERENCEScustomer(customerId);
  5. INSERT INTO customer(name,address) VALUES('张三','武汉市1');
  6. INSERT INTO customer(name,address)VALUES('李四','武汉市2');
  7. INSERT INTO customer(name,address)VALUES('王五','武汉市3');
  8. INSERT INTO orders(customerNo,state ) VALUES(1,'完成');
  9. INSERT INTO orders(customerNo,state ) VALUES(1,'未完成');
  10. INSERT INTO orders(customerNo,state ) VALUES(2,'完成');
  11. INSERT INTO orders(customerNo,state ) VALUES(2,'完成');
  12. INSERT INTO orders(customerNo,state ) VALUES(2,'未完成');


B.分析
mybatis多表查询 - 图14mybatis多表查询 - 图15因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单

mybatis多表查询 - 图16C.一对一查询
mybatis多表查询 - 图17需求:查询所有订单信息,关联查询下单用户信息。
mybatis多表查询 - 图18方法一
mybatis多表查询 - 图19使用resultType,定义订单pojo类,此pojo类中包括了订单信息和用户信息
mybatis多表查询 - 图20小结
mybatis多表查询 - 图21定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。
mybatis多表查询 - 图22方法二
mybatis多表查询 - 图23使用resultMap,在resultMap中使用association。
注意:当前场景下,每一个类属性都要处理,才能有对应的值返回.

  1. <resultMap id="ordersResultMap" type="com.qzw.bean.Orders">
  2. <id property="orderId" column="orderId"></id>
  3. <result property="state" column="state"></result>
  4. <association property="customer" javaType="com.qzw.bean.Customer">
  5. <id property="customerId" column="customerId"></id>
  6. <result property="name" column="name"></result>
  7. <result property="address" column="address"></result>
  8. </association>
  9. </resultMap>
  10. <select id="selectOrdersList" resultMap="ordersResultMap">
  11. select * from orders,customer where orders.customerNo = customer.customerId
  12. ;
  13. </select>


03_关联查询之一对多查询

mybatis多表查询 - 图24A.需求
mybatis多表查询 - 图25查询所有用户信息,以及和用户关联的订单信息
mybatis多表查询 - 图26使用resultMap
mybatis多表查询 - 图27B.配置映射文件:
mybatis多表查询 - 图28使用resultMap,在resultMap中使用collection

  1. <resultMap id="customerResultMap" type="com.qzw.bean.Customer">
  2. <id property="customerId" column="customerId"></id>
  3. <result property="name" column="name"></result>
  4. <result property="address" column="address"></result>
  5. <collection property="orders" ofType="com.qzw.bean.Orders">
  6. <id property="orderId" column="orderId"></id>
  7. <result property="state" column="state"></result>
  8. </collection>
  9. </resultMap>
  10. <select id="selectCustomerList" resultMap="customerResultMap">
  11. select * from orders,customer where orders.customerNo = customer.customerId ;
  12. </select>


04_关联查询之多对多查询

待补充…