Tres minutos para que comprenda el mapeo de asociaciones de mybatis (análisis de casos uno a uno, muchos a muchos)

------------------------------------------------ La originalidad es no es fácil, si te gusta, ¡dale un poco de me gusta! ---------------------------------------------

A través del estudio de los artículos anteriores, hemos comprendido aproximadamente el conocimiento básico de mybatis y podemos utilizar sentencias SQL básicas para operar la base de datos. En las bases de datos relacionales, hay relaciones de mapeo de uno a uno, uno a muchos y muchos a muchos entre tablas. La relación de mapeo es el conocimiento central de mybatis. En el trabajo futuro, a menudo encontraremos las relaciones de mapeo mencionadas anteriormente. Por lo tanto, es necesario que aprendamos bien la relación de mapeo.

Uno, relación de mapeo uno a uno de mybatis

1. Mapeo uno a uno

  • ¿Qué es una relación de mapeo uno a uno? : Desde la perspectiva de la base de datos es introducir la clave primaria de otra tabla como clave foránea en cualquier tabla. Defina un objeto de otra clase en la definición de esta clase.
  • En mybatis, procesamos mediante la asociación de los elementos secundarios del elemento resultMap.
  • El elemento de asociación tiene los siguientes atributos de configuración
Nombre del Atributo efecto
propiedad Especifique el atributo del objeto de clase de entidad al que se asigna, correspondiente al campo de tabla uno a uno
columna Especifique el campo correspondiente en la tabla.
Seleccione Especifique la instrucción sub-SQL que introduce la consulta anidada. Este atributo se utiliza para asociar la consulta anidada en el mapeo.
javaType Especifique el tipo asignado al atributo del objeto de entidad
  • Se establecen dos métodos de consulta en mybatis: consulta anidada y consulta de resultado anidada
 <!--方式一:嵌套查询--!〉
        <association property="card" column="card_id" javaType="com.itheima.po.ldCard"
        select="com.itheima.mapper.ldCardMapper.findCodeByld" />

        <!--方式二:嵌套结果--!〉
        <association property="card" javaType="com.itheima.po.ldCard">
            <id property="id" column="card_id" />
            <result property="code" column="code" />
        </association>

2. [Análisis de caso]

Descripción del caso: Existe una relación de uno a uno entre las personas y las tarjetas de identificación. Tome la relación de uno a uno entre la información personal y las tarjetas de identificación personal como ejemplo. Pregunte acerca de la información personal y obtenga la información de la tarjeta de identificación correspondiente a través de uno mapeo a uno.
[Análisis]: De acuerdo con el marco mybatis, sabemos que las declaraciones de mapeo relacional mybatis están escritas en Mapper.xml. En el mapeo relacional mybatis, necesitamos usar el elemento resuletMap. El uso de este elemento se explica en detalle en la Mapeo de resultMap en el artículo anterior Se ha explicado y puede ser consultado por usted mismo. StudentMapper.xml se escribe de la siguiente manera

Código de archivo de asignación: StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 3-5行是mybatis约束配置 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.mapper.StudentMapper">
	<!-- 嵌套查询 
	<select id="querystudent" parameterType="int" resultMap="IdS">
		select * from student where id=#{id}
	</select>
	<resultMap type="Student" id="IdS">
		<id property="id" column="id"/>
		<result property="s_name" column="s_name"/>
		<result property="s_age" column="s_age"/>
		<result property="s_sex" column="s_sex"/>
		<association property="card_id" column="card_id" javaType="Idcard"
			select="org.mybatis.mapper.IdcardMapper.queryinfo">
		</association>
	</resultMap>
	-->
	<!--  嵌套结果-->
	<select id="querystudent" resultMap="Ids"> 	<!-- select语句的返回值是resultMap类型-->
		<!-- sql查询语句, 当p.card_id = idcard.id时,获取student表中所有数据和idcard表中的code数据-->
		select p.*,idcard.code 
		from student p,idcard idcard
		where p.card_id = idcard.id
	</select>
		<!-- 一对一映射需要使用resultMap元素封装查询到的信息,id值需要与上文select语句中引用的resultMap="Ins"值相同--->
	<resultMap type="Student" id="Ids">
	<!--映射 Student类中属性与student表的字段一一对应-->
		<id property="id" column="id"/>
		<result property="s_name" column="s_name"/>
		<result property="s_age" column="s_age"/>
		<result property="s_sex" column="s_sex"/>
		<!--映射 Idcard类中属性与idcard表的字段一一对应,并将数据放入Student类的属性card_id中-->
		<association property="card_id" javaType="Idcard">
			<id property="id" column="card_id"/>
			<result property="code" column="code"/>
		</association>
	</resultMap>
</mapper>

Dos, relación de mapeo uno a muchos mybatis

1. Relación de mapeo de uno a muchos

  • ¿Qué es una relación de uno a muchos? Una relación de uno a muchos es que un dato de la tabla A corresponde a varios datos de la tabla B, por ejemplo, la relación entre un usuario y un pedido, un usuario. puede tener información de varios pedidos.

  • En mybatis, procesamos la colección de elementos secundarios del elemento resultMap.

  • El elemento de colección tiene los siguientes atributos de configuración

Nombre del Atributo efecto
propiedad Especifique el atributo del objeto de clase de entidad al que se asigna, correspondiente al campo de tabla uno a uno
columna Especifique el campo correspondiente en la tabla.
Seleccione Especifique la instrucción sub-SQL que introduce la consulta anidada. Este atributo se utiliza para asociar la consulta anidada en el mapeo.
javaType Especifique el tipo asignado al atributo del objeto de entidad
ofType El atributo ofType corresponde al atributo javaType, que se utiliza para especificar el tipo de elemento contenido en el atributo de clase de colección en el objeto de entidad.
  • Cabe señalar que en la asignación de uno a muchos y en la asignación de muchos a muchos, el atributo ofType se usa en la propiedad del elemento de colección para especificar el objeto de entidad en lugar del atributo JavaType.

2. [Análisis de caso]

Descripción del caso: Tomando como ejemplo usuarios y pedidos, si un usuario tiene tres pedidos, cómo obtener la información del pedido correspondiente al usuario consultando al usuario.
[Análisis]: un usuario puede tener información de varios pedidos. Esto constituye una relación de mapeo de uno a muchos. A través de la relación de mapeo de uno a muchos en mybatis, el requisito se puede completar después de escribir la declaración correspondiente en el archivo mapper.xml.

Código de archivo de mapeo: OrdersMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--a.一对多嵌套结果  -->
<mapper namespace="org.mybatis.mapper.UserMapper">
	<select id="queryorders" parameterType="int" resultMap="Ins">        <!-- select语句的返回值是resultMap类型-->
		<!-- sql查询语句, 当u.id = o.user_id, u.id="传入值"时,获取user 表中id="传入值"的数据以及orders 表中的订单数据-->
		select u.*,o.id as orders_id,o.number
		from user u,orders o
		where u.id = o.user_id
		and u.id=#{id}
	</select>
	<!-- 一对多映射需要使用resultMap元素封装查询到的信息,且id值需要与上文select语句中引用的resultMap="Ins"值相同-->
	<resultMap type="org.mybatis.beans.User" id="Ins">
		<!--映射 User类中属性与user表的字段一一对应-->
		<id property="id" column="id"/>
		<result property="username" column="username"/>
		<result property="address" column="address"/>
		  <!--  a.1对多关联映射: collection  
			ofType 表示属性集合中元素的类型, List<Orders>属性即 Orders 类-->
		<collection property="orderList" ofType="org.mybatis.beans.Orders">
		<!--映射 Orders类中属性与orders表的字段一一对应-->
		<id property="id" column="orders_id"/>
		<result property="number" column="number"/>
		</collection>
	</resultMap>
</mapper>

Tres, relación de mapeo de muchos a muchos de mybatis

1. Relación de mapeo de muchos a muchos

  • ¿Qué es una relación de muchos a muchos? Una relación de uno a muchos es que un dato de la Tabla A corresponde a varios datos de la Tabla B. Por ejemplo, la relación entre un usuario y un pedido, un usuario puede tener información de varios pedidos.
  • En mybatis, de acuerdo con el mapeo de uno a muchos, procesamos a través de la colección de elementos secundarios del elemento resultMap. No hay más atributos de elementos de colección consistentes con los anteriores.
    • Cabe señalar que en la asignación de uno a muchos y en la asignación de muchos a muchos, el atributo ofType se usa en la propiedad del elemento de colección para especificar el objeto de entidad en lugar del atributo JavaType.

2. [Análisis de caso]

Descripción del caso: Tomando pedidos y productos básicos como ejemplo, si un pedido tiene tres productos básicos y un producto básico tiene cinco pedidos diferentes, cómo obtener la información del producto correspondiente consultando el pedido y cómo obtener la información del pedido correspondiente consultando el producto básico.
[Análisis]: un producto puede tener información de varios pedidos. Un pedido puede tener información de varios productos. Esto constituye una relación de mapeo de muchos a muchos. En términos generales, en el mapeo de muchos a muchos, se procesa generando una tabla intermedia , y se usa una tabla intermedia para almacenar información de pedidos e información de productos. Pero el elemento resultMap en Mapper.xml es básicamente el mismo que uno a muchos.

Código de archivo de mapeo: OrdersMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.mapper.OrdersMapper">
<!-- 多对多嵌套结果 	-->
	<select id="queryproduct" parameterType="int" resultMap="Ins">
		select o.*,p.id as pid,p.name,p.price
		from orders o,product p,ordersitem oi
		where oi.orders_id=o.id
		and oi.product_id=p.id
		and o.id=#{id}
	</select>
	<resultMap type="Orders" id="Ins">
		<id property="id" column="id"/>
		<result property="number" column="number"/>
		<collection property="productList" ofType="Product">
			<id property="id" column="pid"/>
			<result property="name" column="name"/>
			<result property="price" column="price"/>
		</collection>
	</resultMap>

</mapper>

-------------------------------------------------- -------------------------------------------------público Hay más productos secos en el número. ¡Bienvenido a seguir!

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44989801/article/details/115266954
Recomendado
Clasificación