Mybatis的resultMap中各个标签解释
程序员文章站
2022-07-12 22:39:17
...
<?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="com.dao.IRoleDao">
<!--定义role表的ResultMap-->
<!-- 标签解释: 此处的type是指Role类的类型。
由于mybatis的配置文件中使用了别名标签,所有包名可以省略,只写全限定类名的别名即可 -->
<resultMap id="roleMap" type="role">
<!-- 标签解释: 此处的property是指Role中的属性, column是指数据库role表格中的字段名。
r.id as rid 在下面的查询语句中改成了别名,故使用rid
查询结果主键对应关系 剩下交给驼峰命名封装-->
<id property="roleId" column="rid"></id>
<result property="roleName" column="role_name"></result>
<result property="roleDesc" column="role_desc"></result>
<!-- 标签解释: 此处的property是Role中的属性,由于users的类型是一个集合,所以此处采用<collection>标签
javaType是指products属性的类型,ofType是指products属性的泛型的类型,select是指定当前property属性
是调用哪个方法查出的结果,column是指定将order表中哪一列的值作为参数传给这个方法。
此处没有使用到select标签,而是直接在下面的sql语句中直接查询了List<user> users 的结果集并进行封装,
这个参考案例就使用到了select标签:https://blog.csdn.net/shenshengsu1990/article/details/90484075。
注:一对多时使用<collection>标签,多对一时使用<association>标签-->
<collection property="users" javaType="List" ofType="user">
<id column="id" property="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
<result column="sex" property="sex"></result>
<result column="birthday" property="birthday"></result>
</collection>
</resultMap>
<!--查询所有-->
<select id="findAll" resultMap="roleMap">
select u.*,r.id as rid,r.role_name,r.role_desc from role r
left outer join user_role ur on r.id = ur.rid
left outer join user u on u.id = ur.uid
</select>
</mapper>
表单:
javaBean:
package com.pojo;
public class Product {
private String orderId;
private String product;
}
package com.domain;
import java.util.List;
public class Order {
private String userId;
private String orderId;
private List<Product> products;
}
resultMap标签解释案例:
<!--
要求:查询用户的订单信息(每个用户有多张订单,每张订单有多个商品)
步骤:
1.先从order表中根据user_id查出user_id
2.根据查出的user_id去product表中查出商品信息
-->
<!-- 标签解释: 此处的type是指Order类的类型。
由于mybatis的配置文件中使用了别名标签,所有包名可以省略,只写类名即可 -->
<resultMap type="Order" id="orderRM">
<!-- 标签解释: 此处的property是指Order中的属性, column是指order表格中的字段名。
查询结果主键对应关系 剩下交给驼峰命名封装-->
<id property="orderId" column="order_id" />
<!-- 标签解释: 此处的property是Order中的属性,由于products的类型是一个集合,所以此处采用<collection>标签
javaType是指products属性的类型,ofType是指products属性的泛型的类型,select是指定当前property属性
是调用哪个方法查出的结果,column是指定将order表中哪一列的值作为参数传给这个方法。
注:一对多时使用<collection>标签,多对一时使用<association>标签-->
<collection property="products" javaType="List"
ofType="Product" column="order_id" select="queryProduct"></collection>
</resultMap>
<select id="queryOrder" parameterType="String" resultMap="orderRM">
select * from order where user_id=#{userId};
</select>
<select id="queryProduct" parameterType="String" resultType="Product">
select * from product where order_id=#{orderId};
</select>
学习笔记,参考:https://www.bilibili.com/video/BV1mE411X7yp?p=55
https://blog.csdn.net/shenshengsu1990/article/details/90484075 好文 简单 有助于理解