Mybatis学习小结(三)
2017-04-01 21:20
246 查看
使用ResultMap完成高级映射
首先建立四张表:
用户表user:
记录了购买商品的用户
订单表orders:
记录了用户所创建的订单信息
订单明细表orderdetail:
记录了用户创建订单的详细信息
商品信息表items:
记录了商家提供的商品信息
首先分析四张表之间的关系:
用户user和订单orders:
user---->orders:一个用户可以创建多个订单 一对多
orders-->user:一个订单只能由一个用户创建 一对一
订单orders和订单明细orderdetail:
orders-->orderdetail:一个订单可以包括多个订单明细 一对多
orderdetail-->orders:一个订单明细只属于一个订单 一对一
订单明细orderdetail和商品信息items:
orderdetail-->items:一个订单明细对应一个商品信息一对一
items--> orderdetail:一个商品对应多个订单明细 一对多
需求一:
查询订单信息关联查询用户信息(一对一查询)
1、分析需求:订单表为主表,关联查询用户表
2、sql语句:SELECT orders.*,user.username,user.sex FROM orders,USER WHERE orders.user_id = user.id
3、可以使用resultType也可使用resultMap实现
A、resultType实现
po类
ordercustom为需要查询的属性的po类,
mapper.xml
mapper.java
B、resultMap实现
resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中
po类:
mapper.xml
mapper.java
resultType:要自定义pojo 保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。
resultMap:使用association完成一对一映射需要配置一个resultMap,过程有点复杂,如果要实现
延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关
联信息映射到pojo中方便解析。
需求二:
查询所有订单信息及订单下的订单明细信息(一对多查询)
1、分析需求:订单表为主表,关联查询订单明细表
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
3、使用resultMap实现
po类:
mapper.xml(注意与一对一查询的对比)
mapper.java
需求三:
查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息(一对多复杂查询)
1、分析需求:用户表为主表,关联查询其他三个表(关键捋清楚几个表之间的关系,就很简单了)
2、sql语句:
SELECT orders.*, user.username, user.sex , orderdetail.id orderdetail_id, orderdetail.items_num,
orderdetail.items_id , items.nameitems_name, items.detailitems_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、使用resultMap实现
po类:
mapper.xml
mapper.java
首先建立四张表:
用户表user:
记录了购买商品的用户
订单表orders:
记录了用户所创建的订单信息
订单明细表orderdetail:
记录了用户创建订单的详细信息
商品信息表items:
记录了商家提供的商品信息
首先分析四张表之间的关系:
用户user和订单orders:
user---->orders:一个用户可以创建多个订单 一对多
orders-->user:一个订单只能由一个用户创建 一对一
订单orders和订单明细orderdetail:
orders-->orderdetail:一个订单可以包括多个订单明细 一对多
orderdetail-->orders:一个订单明细只属于一个订单 一对一
订单明细orderdetail和商品信息items:
orderdetail-->items:一个订单明细对应一个商品信息一对一
items--> orderdetail:一个商品对应多个订单明细 一对多
需求一:
查询订单信息关联查询用户信息(一对一查询)
1、分析需求:订单表为主表,关联查询用户表
2、sql语句:SELECT orders.*,user.username,user.sex FROM orders,USER WHERE orders.user_id = user.id
3、可以使用resultType也可使用resultMap实现
A、resultType实现
po类
ordercustom为需要查询的属性的po类,
mapper.xml
mapper.java
B、resultMap实现
resultMap提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到pojo中
po类:
mapper.xml
mapper.java
resultType:要自定义pojo 保证sql查询列和pojo的属性对应,这种方法相对较简单,所以应用广泛。
resultMap:使用association完成一对一映射需要配置一个resultMap,过程有点复杂,如果要实现
延迟加载就只能用resultMap实现 ,如果为了方便对关联信息进行解析,也可以用association将关
联信息映射到pojo中方便解析。
需求二:
查询所有订单信息及订单下的订单明细信息(一对多查询)
1、分析需求:订单表为主表,关联查询订单明细表
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
3、使用resultMap实现
po类:
mapper.xml(注意与一对一查询的对比)
mapper.java
需求三:
查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息(一对多复杂查询)
1、分析需求:用户表为主表,关联查询其他三个表(关键捋清楚几个表之间的关系,就很简单了)
2、sql语句:
SELECT orders.*, user.username, user.sex , orderdetail.id orderdetail_id, orderdetail.items_num,
orderdetail.items_id , items.nameitems_name, items.detailitems_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、使用resultMap实现
po类:
mapper.xml
mapper.java
相关文章推荐
- MyBatis学习(三)- 小结
- mybatis学习小结
- MyBatis学习(三)- 小结
- MyBatis学习小结
- springmvc学习笔记(21)-springmvc整合mybatis遇到的问题及解决小结
- 2017.8.18学习Mybatis中#{}和${}传参的区别及#和$的区别小结
- springmvc学习笔记(21)-springmvc整合mybatis遇到的问题及解决小结
- Mybatis学习小结(二)
- mybatis学习小结(一)
- [学习小结]Mybatis的快速入门--相关配置的步骤和CRUD实现
- mybatis快速入门学习教程新手注意问题小结
- MyBatis学习——第一个mybatis、MyBatis接口式编程、小结
- XML规范和学习资源小结
- c++学习小结
- Dev-C++下基本数据类型学习小结
- Page 的生命周期学习小结
- 学习阶段小结
- 学习Python知识小结 杂记二
- Page 的生命周期学习小结
- [持续更新] 学习历程 迭代计划和小结