今天参考了一些案列,写了一个多级列表,一开始打算用循环递归的方式,但是后面看到mybatis的collection可以实现,我就尝试了一下
Mybatis中的SQL语句
<mapper namespace="com.example.list.demo.mapper.ListMapper">
<resultMap id="MyListMap" type="com.example.list.demo.entity.RiskTable">
<id property="code" column="code" jdbcType="VARCHAR"></id>
<result property="riskName" column="risk_name" jdbcType="VARCHAR"></result>
<result property="parentCode" column="parent_code" jdbcType="VARCHAR"></result>
<collection property="children" column="{code=code}" select="getByOneParentNode" ofType="com.example.list.demo.entity.RiskTable">
</collection>
</resultMap>
<!--通过controller传递parent code 获取子节点-->
<select id="getByOneParentNode" resultMap="MyListMap">
select
*
from risk_table t
where t.parent_code = #{code}
order by t.risk_name
</select>
</mapper>
Controller
@RestController
public class ListController {
@Autowired
private ListService listService;
//传递父节点code
@GetMapping(value = "node/getNode")
public Result getByOneParentNode(@RequestParam("parent_code") String parentcode){
List<RiskTable> byOneParentNode = listService.getByOneParentNode(parentcode);
return Result.success(byOneParentNode);
}
}
用的springboot 2.x其他的mapper和service和日常一样
数据库有一点的是,头节点的parent不能等于自己的ID不然会产生死循环