1.数据库
数据表创建
CREATE TABLE `tb_test` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`pid` int(0) NULL DEFAULT NULL,
`cityname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
加入数据
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (1, 0, '中国', '0', '国');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (2, 1, '湖北省', '1', '省');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (3, 2, '武汉市', '2', '市');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (4, 2, '黄石市', '2', '市');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (5, 1, '湖南省', '1', '省');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (6, 5, '长沙市', '2', '市');
INSERT INTO `skking-progran`.`tb_test`(`id`, `pid`, `cityname`, `type`, `content`) VALUES (7, 5, '岳阳市', '2', '市');
2.使用mybatis进行递归
1.实体类
声明一个包含实体类的集合 List<TbTest> tbTests;
@Data
public class TbTest extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long pid;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String cityname;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String type;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String content;
private List<TbTest> tbTests;
}
2. Service层方法
默认查询pid为0的中国数据
public List<TbTest> selectTbTestList(TbTest tbTest)
{
return tbTestMapper.selectTbTestList(0L);
}
3.mapper.xml实现
1.执行SQL select id, pid, cityname, type, content from tb_test where pid = #{pid}
2. resultMap进行了封装
3. collection 又执行selectTbTestList
4.又进入了此查询下面的市进行了递归
<mapper namespace="com.system.mapper.TbTestMapper">
<resultMap type="TbTest" id="TbTestResult">
<result property="id" column="id" />
<result property="pid" column="pid" />
<result property="cityname" column="cityname" />
<result property="type" column="type" />
<result property="content" column="content" />
<collection property="tbTests" ofType="com.system.domain.TbTest" column="id" select="selectTbTestList"></collection>
</resultMap>
<select id="selectTbTestList" parameterType="Long" resultMap="TbTestResult">
select id, pid, cityname, type, content from tb_test where pid = #{pid}
</select>
</mapper>
4.结果截图