MyBatis: consulta relacionada

Consulta uno a uno

Método uno, defina la clase de empaquetado pojo como el tipo de salida

Después de que la clase OrdersCustom hereda la clase Orders, la clase OrdersCustom incluye todos los campos de la clase Orders, y solo se deben definir los campos de la clase User.

public class OrdersCustom extends Orders {

	private String username; //用户名称
public class Orders {

	private Integer oid;
	private String name;
	private Integer userId;
<select id="findOrdersList" resultType="org.haiwen.pojo.OrdersCustom">
    SELECT
    	`user`.username,
    	orders.*
    FROM
    	`user`,
    	orders
    WHERE
    	`user`.uid = orders.user_id
</select>
public List<OrdersCustom> findOrdersList() throws Exception;
@Test
public void testFindOrdersList() throws Exception {
	SqlSession sqlSession = sqlSessionFactory.openSession();
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	List<OrdersCustom> list = userMapper.findOrdersList();
	System.out.println(list);
	sqlSession.close();
}

Método dos, use la asociación para la consulta de asociación

public class Orders {

	private Integer oid;
	private String name;
	private Integer userId;
	private User user;
<select id="findOrdersListResultMap" resultMap="userordermap">
    SELECT
    	`user`.username,
    	orders.*
    FROM
    	`user`,
    	orders
    WHERE
    	`user`.uid = orders.user_id
</select>

<resultMap type="org.haiwen.pojo.Orders" id="userordermap">
	<!-- 这里的id,是mybatis在进行一对一查询时将order字段映射为order对象时要使用,必须写 -->
	<id property="oid" column="oid" />
	<result property="name" column="name" />
	<result property="userId" column="user_id" />
	<association property="user" javaType="org.haiwen.entity.User">
		<id property="uid" column="uid" />
		<result property="username" column="username" />
	</association>
</resultMap>

asociación: indica un registro único para consulta de asociación

propiedad: indica que el resultado de la consulta asociada se almacena en la propiedad de usuario de org.haiwen.pojo.Orders

javaType: indica el tipo de resultado de la consulta asociada

<id property = "id" column = "id" />: La columna id del resultado de la consulta corresponde al atributo id del objeto asociado. Aquí, id representa el identificador único del objeto de consulta asociado.

<result property = "username" column = "username" />: la columna de nombre de usuario del resultado de la consulta corresponde al atributo de nombre de usuario del objeto asociado.

public List<Orders> findOrdersListResultMap() throws Exception;
@Test
public void testFindOrdersListResultMap() throws Exception {
	SqlSession sqlSession = sqlSessionFactory.openSession();
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	List<Orders> list = userMapper.findOrdersListResultMap();
	System.out.println(list);
	sqlSession.close();
}

Consulta uno a muchos

Método uno, use la colección para realizar consultas de asociación

public class Orders {

	private Integer oid;
	private String name;
	private Integer userId;
	private User user;
	private List<OrdersDetail> ordersDetail;
public class OrdersDetail {

	private Integer odid;
	private Integer num;
	private Integer ordersId;
<select id="findOrdersDetailList" resultMap="userordersdetailmap">
	SELECT
		*
	FROM
		`user`,
		orders,
		ordersdetail
	WHERE
		`user`.uid = orders.user_id
	AND orders.oid = ordersdetail.orders_id
</select>

<resultMap type="org.haiwen.pojo.Orders" id="userordersdetailmap">
	<id property="oid" column="oid" />
	<result property="name" column="name" />
	<result property="userId" column="user_id" />
	<association property="user" javaType="org.haiwen.entity.User">
		<id property="uid" column="uid" />
		<result property="username" column="username" />
	</association>
	<collection property="ordersDetail" ofType="org.haiwen.pojo.OrdersDetail">
		<id property="odid" column="odid" />
		<result property="num" column="num" />
		<result property="ordersId" column="orders_id" />
	</collection>
</resultMap>

colección: indica el conjunto de resultados de la consulta relacionada

propiedad = "ordersDetail": el conjunto de resultados de la consulta asociada se almacena en la propiedad ordersDetail de org.haiwen.pojo.Orders

ofType = "org.haiwen.pojo.OrdersDetail": especifica el tipo de objeto en el conjunto de resultados de la consulta asociada, es decir, el tipo de objeto en la Lista.

public List<Orders> findOrdersDetailList() throws Exception;
@Test
public void testFindOrdersDetailList() throws Exception {
	SqlSession session = sqlSessionFactory.openSession();
	UserMapper userMapper = session.getMapper(UserMapper.class);
	List<Orders> list = userMapper.findOrdersDetailList();
	for (Orders orders : list) {
		System.out.println(list);
	}
	session.close();
}

Método dos, el uso se extiende para heredar la información del pedido userordermap

El resultMap definido anteriormente es el mismo que el resultMap para la consulta uno a uno de la información del pedido, excepto para la etiqueta de recopilación. Aquí, la herencia se puede utilizar para evitar completar contenido duplicado, como sigue:

<resultMap type="org.haiwen.pojo.Orders" id="userordersdetailmap" extends="userordermap">
	<collection property="ordersDetail" ofType="org.haiwen.pojo.OrdersDetail">
		<id property="odid" column="odid" />
		<result property="num" column="num" />
		<result property="ordersId" column="orders_id" />
	</collection>
</resultMap>

Consulta de muchos a muchos

public class User {

	private Integer uid;
	private String username;
	private List<Orders> orders;
public class Orders {

	private Integer oid;
	private String name;
	private List<OrdersDetail> ordersDetail;
public class OrdersDetail {

	private Integer odid;
	private Integer num;
	private Items items;
public class Items {

	private Integer iid;
	private String itemsName;
	private String itemsNum;
	private Integer ordersdetailId;

La información que debe correlacionarse con el mapa de consulta es: pedido, detalles del pedido, información del producto

Pedidos: un usuario corresponde a varios pedidos, y la colección se asigna al atributo de la lista de pedidos del objeto de usuario

Detalles del pedido: un pedido corresponde a varios detalles y se asigna al atributo de detalle en el objeto de pedido mediante la colección

Información del producto: el detalle de un pedido corresponde a un producto, y la asociación se asigna al atributo de producto del objeto de detalle del pedido

<select id="findAllItems" resultMap="userOrderListResultMap">
	SELECT
		`user`.username,
		orders.`name`,
		ordersdetail.num,
		items.items_name,
		items.items_num
	FROM
		`user`,
		orders,
		ordersdetail,
		items
	WHERE
		`user`.uid = orders.user_id
	AND orders.oid = ordersdetail.orders_id
	AND ordersdetail.odid = items.ordersdetail_id
</select>

<resultMap type="org.haiwen.entity.User" id="userOrderListResultMap">
<id property="uid" column="uid" />
<result property="username" column="username" />
<collection property="orders" ofType="org.haiwen.pojo.Orders">
	<id property="oid" column="oid" />
	<result property="name" column="name" />
	<collection property="ordersDetail" ofType="org.haiwen.pojo.OrdersDetail">
		<id property="odid" column="odid" />
		<result property="num" column="num" />
		<association property="items" javaType="org.haiwen.pojo.Items">
			<id property="iid" column="iid" />
			<result property="itemsName" column="items_name" />
			<result property="itemsNum" column="items_num" />
		</association>
	</collection>
</collection>
</resultMap>
public List<User> findAllItems() throws Exception;
@Test
public void testFindAllItems() throws Exception {
	SqlSession session = sqlSessionFactory.openSession();
	UserMapper userMapper = session.getMapper(UserMapper.class);
	List<User> list = userMapper.findAllItems();
	for (User user : list) {
		System.out.println(list);
	}
	session.close();
}

Resumen

resultType :

Función: Asigna los resultados de la consulta a pojo de acuerdo con la coherencia del nombre de la columna sql nombre de atributo pojo.

Ocasiones: visualización común de algunos registros detallados, como los detalles de compra de productos del usuario, cuando se muestra toda la información de consulta relacionada en la página, puede usar directamente resultType para asignar cada registro a pojo y recorrer la lista en la página principal (la lista es pojo )

resultMap :

Cuando existan requisitos especiales de mapeo para los resultados, utilice la asociación y la recopilación para completar el mapeo avanzado uno a uno y uno a muchos.

asociación:

Rol: Asigna información de consulta relacionada a un objeto pojo.

Ocasión: para la conveniencia de consultar información relacionada, puede usar la asociación para asignar información de orden relacionada al atributo pojo del objeto de usuario, por ejemplo: orden de consulta e información de usuario relacionada.

El tipo de resultado no se puede utilizar para asignar el resultado de la consulta al atributo pojo del objeto pojo. Según la necesidad de recorrer la consulta del conjunto de resultados, elija si desea utilizar resultType o resultMap.

colección:

Función: Asigna información de consulta relacionada a una colección de listas.

Ocasión: para facilitar la consulta y el recorrido de la información relacionada, puede usar la colección para asignar información relacionada a la colección de la lista, por ejemplo: consultar el módulo de rango de permisos de usuario y el menú debajo del módulo, usar la colección para asignar el módulo a la lista de módulos y asignar la lista de menús al módulo En la propiedad de la lista del menú del objeto, el propósito de esta operación también es facilitar la consulta transversal del conjunto de resultados de la consulta.

Si usa resultType, no puede asignar los resultados de la consulta a la colección de listas.

202 artículos originales publicados · elogiados 37 · 30,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/lovecuidong/article/details/102496058
Recomendado
Clasificación