English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Primero, aún damos una necesidad: consultar los detalles del pedido según el id del pedido - sabemos que en un pedido pueden haber varios detalles del pedido (los amigos que no están claros, por favor dejen un mensaje o vayan al lugar de los pedidos en el sitio web de Taobao para entender). En este momento, un pedido corresponde a varios ids de pedidos. ¿Cómo debemos consultar cuando se presenta esta necesidad?
En este momento, nuestro modelo de datos se muestra como se ve en la figura de la izquierda (izquierda), ya que el usuario de la consulta también es nuestra necesidad, por lo que se amplió en la base original, el modelo de datos es el siguiente (derecha):
很显然,如果用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: Mapear múltiples registros de consulta de asociación a qué propiedad de cn.itcast.mybatis.po.Orders ofType: Especificar el tipo de pojo que se mapea a la propiedad de lista --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <!-- id: Identificador único de la información de pedido property: Mapear el identificador único de la información de pedido a qué propiedad de 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
Resumen
Es simplemente usar el collection de resultMap para mapear múltiples registros de consulta de asociación a una propiedad de lista.
Lo que se ha mencionado anteriormente es la función de consulta uno a muchos de mybatis que el editor le ha presentado a todos, espero que pueda ser útil para todos. Si tiene alguna pregunta, déjeme un mensaje y el editor responderá a tiempo. También agradezco mucho el apoyo de todos a la página web de呐喊教程!
Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.3Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.