1. 需求:
查询用户及用户购买商品的信息:
2.映射思路:
将用户信息映射到user中。
在user中添加List<Order> orderList属性,将用户创建的订单映射到orderList属性中。
在Order中添加List<Orderdetil> orderDetilList属性,将订单中的明细映射到orderDetilList属性中。
在OrderDeti类中,添加Items item属性,将商品信息映射到Item中。
3.pojo类:
用户实体类 User:
- public class User {
- private int id;
- private String username;
- private String sex;
- private Date birthday;
- private String address;
-
- private List<Orders> orders;
订单实体类 Orders:
- public class Orders {
- private Integer id;
-
- private Integer userId;
-
- private String number;
-
- private Date createtime;
-
- private String note;
-
-
- private User user;
- private List<Orderdetail> orderdetails;
-
订单明细实体类 Orderdetail:
- public class Orderdetail {
- private Integer id;
-
- private Integer ordersId;
-
- private Integer itemsId;
-
- private Integer itemsNum;
-
-
- private Items items;
-
商品实体类 Items:
- public class Items {
- private Integer id;
- //商品名称
- private String name;
- //商品图片路径
- private String pic;
- //商品价格
- private Double price;
- //商品创建时间
- private String createtime;
-
- private String detail;
-
4.mapper.xml:
- <select id="findUser" resultMap="userMapper" >
- SELECT
- orders.*,
- user.username,
- user.sex,
- user.address,
- orderdetail.id orderdetail_id,
- orderdetail.items_id,
- orderdetail.items_num,
- orderdetail.orders_id,
- items.`id`,
- items.`name`,
- items.`pic`,
- items.`price`,
- items.`createtime`,
- items.`detail`
- FROM
- orders,
- USER,
- orderdetail,
- items
- WHERE orders.user_id = user.id AND orders.`id`=orderdetail.`orders_id` AND orderdetail.`items_id` = items.`id`
-
- </select>
-
-
-
-
- <resultMap type="cn.edu.hpu.ssm.po.User" id="userMapper">
- <id column="user_id" property="id"/>
- <result column="username" property="username"/>
- <result column="sex" property="sex"/>
- <result column="address" property="address"/>
- <collection property="orders" ofType="cn.edu.hpu.ssm.po.Orders">
- <id column="id" property="id"/>
- <result column="user_id" property="userId"/>
- <result column="number" property="number"/>
- <result column="createtime" property="createtime"/>
- <result column="note" property="note"/>
- <collection property="orderdetails" ofType="cn.edu.hpu.ssm.po.Orderdetail">
- <id column="orderdetail_id" property="id"/>
- <result column="orders_id" property="ordersId"/>
- <result column="items_id" property="itemsId"/>
- <result column="items_num" property="itemsNum"/>
- <association property="items" javaType="cn.edu.hpu.ssm.po.Items">
- <id column="items_id" property="id"/>
- <result column="name" property="name"/>
- <result column="price" property="price"/>
- <result column="pic" property="pic"/>
- <result column="createtime" property="createtime"/>
- <result column="detail" property="detail"/>
- </association>
- </collection>
- </collection>
- </resultMap>
5.mapper.Java 接口:
-
-
-
- public List<User> findUser();
对多总结:
将查询用户购买的商品信息明细清单,(用户名、用户地址、购买商品名称、购买商品时间、购买商品数量)
针对上边的需求就使用resultType将查询到的记录映射到一个扩展的pojo中,很简单实现明细清单的功能。
一对多是多对多的特例,如下需求:
查询用户购买的商品信息,用户和商品的关系是多对多关系。
需求1:
查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见)
企业开发中常见明细列表,用户购买商品明细列表,
使用resultType将上边查询列映射到pojo输出。
需求2:
查询字段:用户账号、用户名称、购买商品数量、商品明细(鼠标移上显示明细)
使用resultMap将用户购买的商品明细列表映射到user对象中。
总结:
使用resultMap是针对那些对查询结果映射有特殊要求的功能,,比如特殊要求映射成list中包括多个list。
7.ResultMap总结:
ResultType:
作用:
将查询的结果按照pojo属性名,一一映射到pojo的属性中去。
场合:
常见一些明细信息的展示,比如用户购买的商品的明细,将关联查询的信息全部展示在页面上时,此时可是使用ResultType将每条记录映射到pojo类中,在前端页面遍历list即可。
ResultMap:
使用association和collection完成一对一和一对多的高级映射(对结果集有特殊要求)。
association:
作用:
将关联查询表,映射到一个pojo对象中。
场合:
为了方便查询关联信息可以使用association将关联订单信息映射为pojo对象的pojo属性中。如:查询订单和关联用户信息。
使用ResultType无法将查询结果映射到pojo对象中pojo属性里,根据对结果集查询遍历的需要选择使用ResultType还是使用ResultMap。
collection:
作用:
将关联查询出来的信息,映射到一个list集合中。
场合:
为了方便查询遍历关联信息,可是使用collection将关联信息映射到list集合中。如:查询用户权限范围模块及模块下的菜单,可以使用collection将模块及模块下的菜单,映射到list中。目的是为了方便查询结果集进行遍历查询。
如果使用ResultType无法映射到list中。