天天看点

Mybatis【17】-- Mybatis自关联查询一对多查询

注:代码已托管在<code>GitHub</code>上,地址是:<code>https://github.com/Damaer/Mybatis-Learning</code> ,项目是<code>mybatis-13-oneself-one2many</code>,需要自取,需要配置<code>maven</code>环境以及<code>mysql</code>环境(<code>sql</code>语句在<code>resource</code>下的<code>test.sql</code>中),觉得有用可以点个小星星。

<code>docsify</code>文档地址在:<code>https://damaer.github.io/Mybatis-Learning/#/</code>

所谓自关联查询,是指自己既然充当一方,又充当多方。比如新闻栏目的数据表,自己可以是父栏目,也可以是多方,子栏目。在数据表里面实现就是一张表,有一个外键<code>pid</code>,用来表示该栏目的父栏目,一级栏目没有父栏目的,可以将其外键设置为0。

<code>DB</code>表如下:

Mybatis【17】-- Mybatis自关联查询一对多查询

查询指定目录的所有子孙目录,我们需要使用递归的思想,查出当前栏目之后,需要将当前栏目的<code>id</code>作为下一级栏目的<code>pid</code>。

实体类<code>NewsLabel.java</code>,使用一对多的关系:

定义<code>sql</code>接口:

<code>mapper.xml</code>文件,在递归里面使用本身<code>sql</code>:

测试类<code>MyTest.java</code>:

结果:

这样的写法只能选出子孙栏目,不能将自己的信息输出。

添加一个<code>sql</code>的接口:

<code>mapper</code>文件里面实现,在<code>resultMap</code>里面递归调用另一个<code>sql</code>,最外层的<code>sql</code>只执行一次,这样就可以实现查询自身一次,递归查询子孙栏目的功能:

单元测试:

【作者简介】:

秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

继续阅读