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.