<collection>映射集合结果查询

实体类

private String id;//主键
private String userName;//用户姓名
private List<Article> articleList;

方式一:通过<collection>封装结果集

<resultMap id="BaseRoleResultMap" type="cn.com.hellowood.springsecurity.model.RoleModel">
    <id column="id" property="id" jdbcType="INTEGER"/>
    <result column="name" property="name" jdbcType="VARCHAR"/>
    <result column="is_active" property="isActive" jdbcType="BOOLEAN"/>
    <result column="description" property="description" jdbcType="VARCHAR"/>
    <result column="last_update_time" property="lastUpdateTime" jdbcType="TIMESTAMP"/>
    <collection property="menus" ofType="cn.com.hellowood.springsecurity.model.MenuModel" javaType="java.util.ArrayList">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="value" property="value" jdbcType="VARCHAR"/>
        <result column="display_value" property="displayValue" jdbcType="VARCHAR"/>
        <result column="url" property="url" jdbcType="VARCHAR"/>
        <result column="category" property="category" jdbcType="INTEGER"/>
        <result column="description" property="description" jdbcType="VARCHAR"/>
        <result column="is_active" property="isActive" jdbcType="BIT"/>
        <result column="last_update_time" property="lastUpdateTime" jdbcType="TIMESTAMP"/>
    </collection>
</resultMap>

查询:

<select id="getRoles" parameterType="java.lang.Integer" resultMap="BaseRoleResultMap">
    SELECT r.id,r.name,r.description,r.is_active,r.last_update_time,m.id,m.value,m.display_value,m.url,m.category,m.description,m.is_active,m.last_update_time
    FROM role r LEFT JOIN role_menu_xref rmx ON r.id = rmx.role_id LEFT JOIN menu m ON m.id = rmx.menu_id WHERE r.id = #{roleId,jdbcType=INTEGER}
</select>

方式二:通过<collection>标签实现分段查找

<resultMap id="BaseRoleResultMap" type="cn.com.hellowood.springsecurity.model.RoleModel">
    <id column="id" property="id" jdbcType="INTEGER"/>
    <result column="name" property="name" jdbcType="VARCHAR"/>
    <result column="is_active" property="isActive" jdbcType="BOOLEAN"/>
    <result column="description" property="description" jdbcType="VARCHAR"/>
    <result column="last_update_time" property="lastUpdateTime" jdbcType="TIMESTAMP"/>
    <collection property="menus" ofType="cn.com.hellowood.springsecurity.model.menus" javaType="java.util.ArrayList" select="getMenus" column="id"></collection>
</resultMap>

对应的Mapper映射文件:

<select id="getMenus" parameterType="java.lang.Integer" resultMap="BaseMenuResultMap">
    SELECT m.id,m.value,m.display_value,m.url,m.category,m.description,m.is_active,m.last_update_time
    FROM menu m LEFT JOIN role_menu_xref rmx ON m.id = rmx.menu_id WHERE role_id = #{roleId, jdbcType=INTEGER}
</select>

查询:

<select id="getEmpByIdStep" resultMap="BaseRoleResultMap">
    select * from role_model where id=#{id}
</select>

<collection/>参数说明

  • collection : 一个复杂的类型关联,许多结果将映射为这种类型
  • property : 这是关联的 JavaBean 中的属性名, 在 RoleModel 中对应 private List<MenuModel> menus;
  • javaType : property 属性对应的集合类型
  • ofType : property 集合中的泛型,在 RoleModel 中是 MenuModel
  • column : RoleModel 的 id ,作为参数传入被调用的 Select 语句
  • select : 另外一个映射语句的 ID

转载于:https://www.cnblogs.com/yifanSJ/p/9094045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`<collection>`标签用于处理一对多或多对多的关联查询,它通常嵌套在`<resultMap>`标签中,用于映射关联对象的集合属性。 在一对多或多对多的关联查询中,查询结果通常是一个父对象和多个子对象的集合。例如,查询订单信息时,一个订单对应多个订单项;查询部门信息时,一个部门对应多个员工。在这种情况下,可以使用`<collection>`标签来映射子对象的集合属性。 `<collection>`标签有两种使用方式: 1. 内嵌查询:在`<collection>`标签中嵌套一个`<select>`标签,用于查询子对象的集合数据。例如: ```xml <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="orderItems" ofType="OrderItem"> <id property="id" column="item_id"/> <result property="itemName" column="item_name"/> <result property="itemPrice" column="item_price"/> <select id="findOrderItemsByOrderId" parameterType="Long" resultType="OrderItem"> select * from order_item where order_id=#{orderId} </select> </collection> </resultMap> ``` 2. 外键关联:在`<collection>`标签中配置关联字段和主表字段,用于关联查询子对象的集合数据。例如: ```xml <resultMap id="departmentResultMap" type="Department"> <id property="id" column="dept_id"/> <result property="deptName" column="dept_name"/> <collection property="employees" ofType="Employee" column="dept_id" select="findEmployeesByDeptId"/> </resultMap> ``` 在这个例子中,`<collection>`标签中的`column`属性指定了关联字段,即部门表中的`dept_id`字段,`select`属性指定了查询语句的id,即`findEmployeesByDeptId`,用于查询关联的子对象集合。在这里,`findEmployeesByDeptId`是一个独立的查询语句,用于查询指定部门下的所有员工。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值