本篇文章写的很烂,请做好准备或直接关闭该页,有嵌套查询方面的问题请留言。


最下面的3行数据,是用SQL查询出来的结果,下图是该数据和JAVA对象的对应关系。

Mybatis嵌套查询的原理与例子_mybatis


生成RowKey的方法:RowKey是为了唯一确定一条数据。如果用户设置了主键,就用主键名+值生成RowKey,如RowKey1用的 id和1(还有一个xml的唯一ID)

假如没有设置主键id,那么就用所有属性来生成RowKey,如id+1,title+偶尔..url+http..等等,所以在mybatis中设置主键能提高效率。


嵌套对象的从属关系通过联合Key来确定,如第一条数据

id,title,url,userid,posts是BlogDto的5个属性,其中id是主键,posts是一个嵌套的List对象。


posts这个嵌套的对象通过BlogDto的RowKey来确定是不是从属于BlogDto。如果属于就会将该post对象add到posts的List中。

PostDto有几个属性,有一个嵌套对象BlogUser和一个List对象BlogComments,这两个通过相同的方法来确定从属关系。


Mybatis每次都是取出一条来确定整个关系,因而会在相同的内容上浪费一样的时间。


想讲明白这个不看代码是很难说清楚的。这里不多说了,具体的流程看下图,有问题的可以留言,整个流程的代码都在DefaultResultSetHandler.java中

Mybatis嵌套查询的原理与例子_mybatis_02




下面是该流程图依据的代码,我整理到excel了,需要的可以下载,配置该流程图查看:

Mybatis嵌套查询的原理与例子_嵌套查询_03


下载地址:

​http://pan.baidu.com/s/1eTS3k​


写这篇文章的时候感觉很麻烦,虽然我理解了,但是实在找不到合适的语言去描述这个,通过了解Mybatis的嵌套查询,对于复杂查询应该会更得心应手,使用嵌套查询确实方便了很多。


这篇文章写的太烂了,如果你有嵌套查询方面的问题,欢迎留言交流。