赞
踩
打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!! 一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感谢关注!!!
下面以商品订单为例,其关系图如下:
查询订单信息,关联查询用户信息
主信息:orders
从信息:user
那么sql语句为:
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`
- FROM
- orders,
- USER
- WHERE orders.`user_id` = user.`id`
首先创建扩展类:
- public class OrdersExt extends Orders {
- // user.`username`,user.`sex`
- private String username;
- private String sex;
- //get set
- }
然后在OrdersMapper.xml中:
- <!-- 一对一映射之resultType -->
- <select id="findOrdersAndUser" resultType="com.itheima.mybatis.po.OrdersExt">
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`
- FROM
- orders,
- USER
- WHERE orders.`user_id` = user.`id`
- </select>
在接口中:
- //一对一之resultType
- public List<OrdersExt> findOrdersAndUser();
小结:
使用resultType来进行一对一结果映射,查询出的列的个数和映射的属性的个数要一致。而且映射的属性要存在与一个大的对象中,它是一种平铺式的映射,即数据库查询出多少条记录,则映射成多少个对象。
使用resultMap来进行一对一结果映射,它是将关联对象添加到主信息的对象中,具体说是对象嵌套对象的一种映射方式。首先修改扩展类:
- public class OrdersExt extends Orders {
- private User user;//用户信息
- //get set
- }
然后在映射文件中:
- <!-- OrdersAndUserRstMap -->
- <resultMap type="com.itheima.mybatis.po.OrdersExt" id="OrdersAndUserRstMap">
- <!-- 订单信息 -->
- <id column="id" property="id" />
- <result column="user_id" property="userId" />
- <result column="number" property="number" />
-
- <!-- 用户信息(一对一) -->
- <!-- association:一对一关联映射 -->
- <!-- property:关联信息查询的结果将要映射的扩展类中的对象属性名称 -->
- <!-- id标签:建议在关联查询时必须写上,不写不会报错,但是会影响性能 -->
- <association property="user" javaType="com.itheima.mybatis.po.User">
- <id column="user_id" property="id" />
- <result column="username" property="username" />
- <result column="sex" property="sex" />
- </association>
- </resultMap>
- <!-- 一对一映射之resultMap -->
- <select id="findOrdersAndUserRstMap" resultMap="OrdersAndUserRstMap">
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`
- FROM
- orders,
- USER
- WHERE orders.`user_id` = user.`id`
- </select>
小结:
在一对一结果映射时,使用resultType更加简单方便,如果有特殊要求(对象嵌套对象)时,需要使用resultMap进行映射,比如:查询订单列表,然后在点击列表中的查看订单明细按钮,这个时候就需要使用resultMap进行结果映射。而resultType更适应于查询明细信息,比如,查询订单明细列表。
查询订单信息,关联查询订单明细信息及用户信息
主信息:orders
从信息:orderdetail、user(一个订单对应多个订单详情)
那么sql语句为:
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`,
- orderdetail.`id` detailId,
- orderdetail.`items_id`,
- orderdetail.`items_num`
- FROM
- orders,
- USER,
- orderdetail
- WHERE orders.`user_id` = user.`id`
- AND orders.`id` = orderdetail.`orders_id`
首先修改扩展类:
- public class OrdersExt extends Orders {
- private User user;//用户信息
- private List<Orderdetail> detailList;//订单明细信息
- //getset
- }
然后在映射文件中:
- <!-- OrdersAndDetailRstMap -->
- <!-- extends:可以继承一个已有的resultMap,指定resultMap的唯一标示即可 -->
- <!-- 注意:继承时,只能继承type类型是一样的resultMap -->
- <resultMap type="com.itheima.mybatis.po.OrdersExt" id="OrdersAndDetailRstMap"
- extends="OrdersAndUserRstMap">
- <!-- 订单明细信息(一对多) -->
- <!-- collection:映射一对多关系 -->
- <collection property="detailList" ofType="com.itheima.mybatis.po.Orderdetail">
- <id column="detailId" property="id" />
- <result column="items_id" property="itemsId" />
- <result column="items_num" property="itemsNum" />
- </collection>
- </resultMap>
-
- <!-- 一对多映射 -->
- <select id="findOrdersAndDetailRstMap" resultMap="OrdersAndDetailRstMap">
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`,
- orderdetail.`id` detailId,
- orderdetail.`items_id`,
- orderdetail.`items_num`
- FROM
- orders,
- USER,
- orderdetail
- WHERE
- orders.`user_id` = user.`id`
- AND orders.`id` = orderdetail.`orders_id`
- </select>
多对多映射是一对多映射的特例
查询用户信息,关联查询该用户购买的商品信息
主信息:user
从信息:items、orders、orderdetail(一个用户对应多个商品,一个商品对应多个用户;)
那么sql语句:
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`,
- orderdetail.`id` detailId,
- orderdetail.`items_id`,
- orderdetail.`items_num`,
- items.`name`,
- items.`price`
- FROM
- orders,
- USER,
- orderdetail,
- items
- WHERE orders.`user_id` = user.`id`
- AND orders.`id` = orderdetail.`orders_id`
- AND orderdetail.`items_id` = items.`id`
首先修改User类(这里没有新加扩展类),在User类中添加List<Orders> orders;
- public class User{
- private int id;
- private String username;// 用户姓名
- private String sex;// 性别
- private Date birthday;// 生日
- private String address;// 地址
-
- //订单信息
- private List<Orders> orders;
- }
然后在Orders类中也添加List<Orderdetail> detailList
- public class Orders {
- private Integer id;
- private Integer userId;
- private String number;
- private Date createtime;
- private String note;
- //订单明细集合
- private List<Orderdetail> detailList;
- }
然后在Orderdetail中添加Items items
- public class Orderdetail {
- private Integer id;
- private Integer ordersId;
- private Integer itemsId;
- private Integer itemsNum;
- //商品信息
- private Items items;
- }
然后在映射文件中:
- <!-- UserAndItemsRstMap -->
- <resultMap type="com.itheima.mybatis.po.User" id="UserAndItemsRstMap">
- <!-- 用户信息 -->
- <id column="user_id" property="id" />
- <result column="username" property="username" />
- <result column="sex" property="sex" />
- <!-- 订单信息(一(用户)对多(订单)) -->
- <collection property="orders" ofType="com.itheima.mybatis.po.Orders">
- <id column="id" property="id" />
- <result column="user_id" property="userId" />
- <result column="number" property="number" />
- <!-- 订单明细信息(一对多) -->
- <collection property="detailList" ofType="com.itheima.mybatis.po.Orderdetail">
- <id column="detailId" property="id" />
- <result column="items_id" property="itemsId" />
- <result column="items_num" property="itemsNum" />
- <!-- 商品信息(一对一) -->
- <association property="items" javaType="items">
- <id column="items_id" property="id" />
- <result column="name" property="name" />
- <result column="price" property="price" />
- </association>
- </collection>
- </collection>
- </resultMap>
-
- <!-- 多对多 -->
- <select id="findUserAndItemsRstMap" resultMap="UserAndItemsRstMap">
- SELECT
- orders.`id`,
- orders.`user_id`,
- orders.`number`,
- user.`username`,
- user.`sex`,
- orderdetail.`id` detailId,
- orderdetail.`items_id`,
- orderdetail.`items_num`,
- items.`name`,
- items.`price`
- FROM
- orders,
- USER,
- orderdetail,
- items
- WHERE orders.`user_id` = user.`id`
- AND orders.`id` =
- orderdetail.`orders_id`
- AND orderdetail.`items_id` = items.`id`
- </select>
在Mapper接口中:
public List<User> findUserAndItemsRstMap();//多对多
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。