English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Zunächst geben wir eine Anforderung vor: Abfrage der Details eines Auftrags basierend auf der Auftrags-ID - wir wissen, dass ein Auftrag mehrere Auftragsdetails haben kann (Fragen, die unklar sind, hinterlassen Sie bitte eine Nachricht oder besuchen Sie den淘宝网上订单, um es zu erfahren). In diesem Moment entspricht ein Auftrag mehreren Auftrags-IDs. Wie sollen wir dies abfragen, wenn diese Anforderung auftritt?
Zu diesem Zeitpunkt sieht unser Datenmodell wie im Diagramm (links) aus. Da auch die Abfragebenutzer unsere Anforderungen sind, haben wir auf dieser Grundlage erweitert, und das Datenmodell ist wie folgt (rechts):
显然,如果使用resultType的方式来实现,是不合理的。因为我们需要创建一个既有订单又有订单明细的pojo,然后mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。
显然,如果使用resultType的方式来实现,是不合理的。因为我们需要创建一个既有订单又有订单明细的pojo,然后mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。
具体实现如下:
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: Die mehreren Zeilen der verknüpften Abfrage werden auf welche Eigenschaft von cn.itcast.mybatis.po.Orders mapping ofType: Die Art des Pojos, der in die Liste der Attribute mapping wird, wird angegeben --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <!-- id: Die eindeutige Identifikation der Bestellposition property: Die eindeutige Identifikation der Bestellposition wird auf welche Eigenschaft von cn.itcast.mybatis.po.Orderdetail mapping? --> <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
Zusammenfassung
Es geht darum, die mehreren Zeilen der verknüpften Abfrage mit Hilfe von resultMap's collection in eine Liste von Attributen zu mapping.
Das oben Genannte ist die von mir vorgestellte mybatis-eine-zu-viele-Abfragefunktion, ich hoffe, es hilft Ihnen weiter. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht, ich werde Ihnen umgehend antworten. Ich danke auch sehr für die Unterstützung der Website呐喊教程!
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrecht des jeweiligen Eigentümers. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie urheberrechtlich beanstandete Inhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Sobald nachgewiesen, wird diese Website die beanstandeten urheberrechtlichen Inhalte sofort löschen.)