English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
首先,我们还是先给出一个需求:根据订单id查询订单明细——我们知道,一个订单里面可以有多个订单的明细(需求不明确的同学,请留言或者去淘宝网上的订单处点一下就知道了)。这个时候,一个订单对应多个订单的id。这种需求出现的时候,我们应该如何查询呢?
此时我们的数据模型如下图(左)。由于查询用户也是我们的需求,所以就在原有的基础上进行扩展,数据模型如下(右):
显然,如果用resultType的方式去实现,这是不合理的。因为我们需要创建一个既有订单又有订单明细的pojo,然后我们的mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。
因此我们需要使用resultMap的方式进行处理。解决问题的思路是:在orders类中增加一个订单明细的List字段,将list的类型定义为Orderdetail类型。然后通过配置文件,将得到的数据,通过resultMap的collection标签进行映射到list中。
具体实现如下:
sql语句
确定主查询表:订单表
确定关联查询表:订单明细表
在一对一查询基础上添加订单明细表关联即可。
SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, USER, orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
问题展示
查询完毕后,我们发现了一个问题:如图所示,我们的id出现了多条,这是因为数据库中对应的多个订单详情共同使用一个订单id导致的。这就导致了每条记录中都会出现一个orders的记录。具体解决办法,开始的时候就说了,这里就不再赘述了。
在orders中添加list订单明细属性
定义resultMap
<!-- 订单及订单明细的resultMap 使用extends继承,无需再重复用户的映射 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap"> <!-- 订单信息 --> <!-- 用户信息 --> <!-- 使用extends继承,无需在配置订单信息和用户信息的映射 --> <!-- 订单明细信息 一个订单关联查询出了多条明细,需要使用collection进行映射 collection:关联查询到多条记录映射到集合对象中 property:关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性 ofType: указывает тип pojo, который будет карта к свойству list集合 --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> --> id: уникальный идентификатор заказа明细 property: необходимо будет карты уникального идентификатора заказа明细 к какому свойству cn.itcast.mybatis.po.Orderdetail? --> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> </collection> </resultMap>
mapper
Резюме
Фактически, это использование collection в resultMap для карты множественных результатов запроса к свойству list.
Вот что я хочу представить вам, уважаемые читатели, это функция запроса mybatis one-to-many. Надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, и я отвечу вам вовремя. Вновь благодарю всех за поддержку сайта呐喊 tuition!
Заявление: данное содержимое взято из Интернета, авторские права принадлежат соответствующему автору. Содержимое предоставлено пользователями Интернета, веб-сайт не owns права собственности, не underwent редактирование, и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите контент,涉嫌版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении, и предоставьте соответствующие доказательства. При обнаружении правонарушения веб-сайт немедленно удаляет涉嫌侵权的内容.