01_表之间关系分析
表关系分类
一对一
比较少见,比如:公司和注册地址
一对一查询一对多
常见,比如:用户和订单
一对一查询,一对多查询多对多
常见,比如:学生,课程,选课表
d多对多查询
02_关联查询之一对一查询
A.环境搭建
**
CREATE TABLE orders(orderId BIGINT PRIMARY KEY AUTO_INCREMENT,customerNo BIGINT
,state VARCHAR(40));
CREATE TABLE customer(customerId BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(60),address VARCHAR(60));
ALTER TABLE orders ADD FOREIGN KEY(customerNo) REFERENCEScustomer(customerId);
INSERT INTO customer(name,address) VALUES('张三','武汉市1');
INSERT INTO customer(name,address)VALUES('李四','武汉市2');
INSERT INTO customer(name,address)VALUES('王五','武汉市3');
INSERT INTO orders(customerNo,state ) VALUES(1,'完成');
INSERT INTO orders(customerNo,state ) VALUES(1,'未完成');
INSERT INTO orders(customerNo,state ) VALUES(2,'完成');
INSERT INTO orders(customerNo,state ) VALUES(2,'完成');
INSERT INTO orders(customerNo,state ) VALUES(2,'未完成');
B.分析因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单
C.一对一查询
需求:查询所有订单信息,关联查询下单用户信息。
方法一
使用resultType,定义订单pojo类,此pojo类中包括了订单信息和用户信息
小结
定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。
方法二
使用resultMap,在resultMap中使用association。
注意:当前场景下,每一个类属性都要处理,才能有对应的值返回.
<resultMap id="ordersResultMap" type="com.qzw.bean.Orders">
<id property="orderId" column="orderId"></id>
<result property="state" column="state"></result>
<association property="customer" javaType="com.qzw.bean.Customer">
<id property="customerId" column="customerId"></id>
<result property="name" column="name"></result>
<result property="address" column="address"></result>
</association>
</resultMap>
<select id="selectOrdersList" resultMap="ordersResultMap">
select * from orders,customer where orders.customerNo = customer.customerId
;
</select>
03_关联查询之一对多查询
A.需求
查询所有用户信息,以及和用户关联的订单信息
使用resultMap
B.配置映射文件:
使用resultMap,在resultMap中使用collection
<resultMap id="customerResultMap" type="com.qzw.bean.Customer">
<id property="customerId" column="customerId"></id>
<result property="name" column="name"></result>
<result property="address" column="address"></result>
<collection property="orders" ofType="com.qzw.bean.Orders">
<id property="orderId" column="orderId"></id>
<result property="state" column="state"></result>
</collection>
</resultMap>
<select id="selectCustomerList" resultMap="customerResultMap">
select * from orders,customer where orders.customerNo = customer.customerId ;
</select>
04_关联查询之多对多查询
待补充…