摘要:无


前言

当你在查询的一个表的数据时候,该表往往与其他表做了关联而且是一对多的关系在接下来作为学习记录进行实现描述。

一、实体描述?

实例:

@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel("报告信息")
public class DataSecurityManageVo extends DataSecurityManage {

    @ApiModelProperty(value = "表字段列表", name = "fields")
    private List<CreditField> fields;

    @ApiModelProperty(value = "操作字段", name = "option")
    private String option;

}

二、实现步骤

1.mapper中自定义resultMap

代码如下

<!--        property:封装的实体的list集合名称
            column:传入的参数进行匹配查询
            ofType:在list中所装的实体
            javaType:查询完后分装的类型
-->
        <collection property="fields" column="{type = type,dataId = data_id}"
                    ofType="com.zjhc.zwb.credit.entity.brain.zndz.ywzt.tyaqgl.CreditField"
                    javaType="java.util.List">
            <id column="id" property="id" />
            <id column="type" property="type"/>
            <id column="data_id" property="dataId"/>
            <result column="field_name_e" property="fieldNameE" />
            <result column="field_name_c" property="fieldNameC" />
            <result column="algorithm" property="algorithm" />
            <result column="encrypte_num" property="encrypteNum" />
            <result column="keep_head" property="keepHead" />
            <result column="content1" property="content1" />
            <result column="keep_later" property="keepLater" />
            <result column="content2" property="content2" />
            <result column="is_deleted" property="isDeleted" />
            <result column="create_time" property="createTime" />
        </collection>
    </resultMap>

2.使用

代码如下:

 <select id="selectDataSecurityMange" resultMap="BaseResultVoMap">
        select <include refid="Base_Column_List"/>
        from t_credit_data_security_manage as dsm where dsm.is_deleted = 0 and dsm.type = #{vo.type}
        <if test="vo.tableName != null and vo.tableName != ''">
            and dsm.table_name like concat('%',#{vo.tableName},'%')
        </if>
        <if test="vo.rule != null and vo.rule != ''">
            and dsm.rule like concat('%',vo.rule,'%')
        </if>
       group by dsm.create_time
    </select>

总结

1、collection是分装在你自定义的resultMap里面、然后就是注意collection里面的其他参数。
2、使用时使用你自己定义的resultMap进行分装就行,剩下的就交给测试!!!


更新最新版:

理解:select * from tree_data where lvl = 1 (column的值)查出来后把id作为查询条件去查孩子把 parent_id = #{id} 所有孩子封装起来

孩子的结果集设置成:resultMap="Result"  每查到一个孩子又去查他孩子的孩子依次遍历直到查不到孩子为止

	<resultMap id="Result" type="com.example.springbootdemo.entity.TreeData">
		<result property="id" column="id"/>
		<result property="name" column="name"/>
		<result property="lvl" column="lvl"/>
		<result property="parentId" column="parent_id"/>
		<collection property="children" column="id" select="getChildren"/>
	</resultMap>
	<select id="getTreeData" resultMap="Result">
		select * from tree_data where lvl = 1
	</select>

	<select id="getChildren" resultMap="Result">
		select * from tree_data where parent_id = #{id}
	</select>

 结果

 

[
    {
        "id": 1,
        "name": "一级菜单1",
        "lvl": 1,
        "parentId": null,
        "children": [
            {
                "id": 6,
                "name": "二级菜单1",
                "lvl": 2,
                "parentId": 1,
                "children": [
                    {
                        "id": 16,
                        "name": "三级菜单2",
                        "lvl": 3,
                        "parentId": 6,
                        "children": [
                            {
                                "id": 24,
                                "name": "四级菜单1",
                                "lvl": 4,
                                "parentId": 16,
                                "children": []
                            }
                        ]
                    },
                    {
                        "id": 18,
                        "name": "三级菜单4",
                        "lvl": 3,
                        "parentId": 6,
                        "children": [
                            {
                                "id": 26,
                                "name": "四级菜单3",
                                "lvl": 4,
                                "parentId": 18,
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "id": 7,
                "name": "二级菜单2",
                "lvl": 2,
                "parentId": 1,
                "children": [
                    {
                        "id": 15,
                        "name": "三级菜单1",
                        "lvl": 3,
                        "parentId": 7,
                        "children": [
                            {
                                "id": 25,
                                "name": "四级菜单2",
                                "lvl": 4,
                                "parentId": 15,
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "id": 8,
                "name": "二级菜单3",
                "lvl": 2,
                "parentId": 1,
                "children": [
                    {
                        "id": 19,
                        "name": "三级菜单5",
                        "lvl": 3,
                        "parentId": 8,
                        "children": [
                            {
                                "id": 28,
                                "name": "四级菜单5",
                                "lvl": 4,
                                "parentId": 19,
                                "children": []
                            }
                        ]
                    },
                    {
                        "id": 20,
                        "name": "三级菜单6",
                        "lvl": 3,
                        "parentId": 8,
                        "children": []
                    }
                ]
            },
            {
                "id": 9,
                "name": "二级菜单4",
                "lvl": 2,
                "parentId": 1,
                "children": [
                    {
                        "id": 21,
                        "name": "三级菜单7",
                        "lvl": 3,
                        "parentId": 9,
                        "children": [
                            {
                                "id": 29,
                                "name": "四级菜单6",
                                "lvl": 4,
                                "parentId": 21,
                                "children": []
                            },
                            {
                                "id": 30,
                                "name": "四级菜单7",
                                "lvl": 4,
                                "parentId": 21,
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "id": 10,
                "name": "二级菜单5",
                "lvl": 2,
                "parentId": 1,
                "children": [
                    {
                        "id": 17,
                        "name": "三级菜单3",
                        "lvl": 3,
                        "parentId": 10,
                        "children": [
                            {
                                "id": 27,
                                "name": "四级菜单4",
                                "lvl": 4,
                                "parentId": 17,
                                "children": []
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "name": "一级菜单2",
        "lvl": 1,
        "parentId": null,
        "children": [
            {
                "id": 11,
                "name": "二级菜单6",
                "lvl": 2,
                "parentId": 2,
                "children": [
                    {
                        "id": 23,
                        "name": "三级菜单9",
                        "lvl": 3,
                        "parentId": 11,
                        "children": [
                            {
                                "id": 31,
                                "name": "四级菜单8",
                                "lvl": 4,
                                "parentId": 23,
                                "children": []
                            }
                        ]
                    }
                ]
            },
            {
                "id": 12,
                "name": "二级菜单7",
                "lvl": 2,
                "parentId": 2,
                "children": [
                    {
                        "id": 22,
                        "name": "三级菜单8",
                        "lvl": 3,
                        "parentId": 12,
                        "children": [
                            {
                                "id": 32,
                                "name": "四级菜单9",
                                "lvl": 4,
                                "parentId": 22,
                                "children": []
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": 3,
        "name": "一级菜单3",
        "lvl": 1,
        "parentId": null,
        "children": [
            {
                "id": 13,
                "name": "二级菜单8",
                "lvl": 2,
                "parentId": 3,
                "children": []
            },
            {
                "id": 14,
                "name": "二级菜单9",
                "lvl": 2,
                "parentId": 3,
                "children": []
            }
        ]
    },
    {
        "id": 4,
        "name": "一级菜单4",
        "lvl": 1,
        "parentId": null,
        "children": []
    },
    {
        "id": 5,
        "name": "一级菜单5",
        "lvl": 1,
        "parentId": null,
        "children": []
    }
]

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐