1 一对一查询
1.1 需求
查询订单信息关联查询用户信息(orders-->user:一个订单只能由一个用户创建 一对一 )
1.2 sql语句
查询语句:
先确定主查询表:订单信息表
再确定关联查询表:用户信息
通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接
SELECT
orders.*,
user.username,
user.sex
FROM
orders,
USER
WHERE orders.user_id = user.id
1.3 使用resultType实现
1.3.1 创建po类
基础的单表的 po类:
1.3.2 一对一查询映射的pojo
创建pojo包括 订单信息和用户信息,resultType才可以完成映射。
创建OrderCustom作为自定义pojo,继承sql查询列多的po类。
1.3.3 mapper.xml
定义mapper.xml文件,
1.3.4 mapper.java
1.4 使用resultMap实现一对一
1.4.1 resultMap映射思路
resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中,如下:
在Orders类中创建一个User属性,将关联查询的信息映射到User属性中。
1.4.2 mapper.xml
1.4.3 resultMap定义
1.4.4 mapper.java
1.5 小结
resultType:要自定义pojo 保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。
resultMap:使用association完成一对一映射需要配置一个resultMap,过程有点复杂,如果要实现延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关联信息映射到pojo中方便解析。
2 一对多查询
2.1 需求
查询所有订单信息及订单下的订单明细信息。
2.2 sql语句
主查询表:订单表
关联查询表:订单明细
SELECT
orders.*,
user.username,
user.sex ,
orderdetail.id orderdetail_id,
orderdetail.items_num,
orderdetail.items_id
FROM
orders,
USER,
orderdetail
WHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id
2.3 resultMap进行一对多映射思路
resultMap 提供collection完成关联信息映射到集合对象中。
在orders类中创建集合属性:
2.4 mapper.xml
2.5 resultMap定义
2.6 mapper.java
3 一对多查询(复杂)
3.1 需求
查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息
3.2 sql
主查询表:用户信息
关联查询:订单、订单明细,商品信息
SELECT
orders.*,
user.username,
user.sex ,
orderdetail.id orderdetail_id,
orderdetail.items_num,
orderdetail.items_id,
items.name items_name,
items.detail items_detail
FROM
orders,
USER,
orderdetail,
items
WHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id AND items.id = orderdetail.items_id
3.3 pojo定义
在user.java中创建映射的属性:集合 List<Orders> orderlist
在Orders中创建映射的属性:集合List<Orderdetail> orderdetails
在Orderdetail中创建商品属性:pojo Items items
3.4 mapper.xml
3.5 resultMap
3.6 mapper.java