在mybatis条件查询中进行类关联查询(类Hibernate关联查询)

上一篇中,已经解决了如何使用构建条件进行数据查询。但在常规的查询中,并不总是单独查询某一个表信息,某些条件还需要关联其它数据表才能得出。我们希望在进行查询时,能够根据条件中所指定的关联表进行关联化查询,并在条件中自动处理关联化条件。如下的查询语句所示:

select a.* from tableA a inner join tableB b on b.a_id = a.id where b.c_id = ? and b.d = ? and a.e != ? 

那么在相应的条件中,即要处理模型之间的关联关系,同时处理在条件中的前缀别名信息,以保证所在表的正确性。那么相应的Criteria表达应该如下所示:

List<Criteria> criteriaList = Lists.newArrayList();
criteriaList.add(Criterias.link(B.class, "b", "aId", LinkMode.INNER));
criteriaList.add(Criterias.eq("b.c_id", cId));
criteriaList.add(Criterias.eq("b.d", d));

即在原来的基础之上,增加一个用于描述关联关系的LinkCriteria,同时在相应的条件上增加属性前缀,用于描述指定的条件主体(当然如果是当前主体不需要前缀)。在具体的生成Mql的过程当中,增加用于处理关联关系的逻辑,同时处理条件的前缀即可。

继续阅读“在mybatis条件查询中进行类关联查询(类Hibernate关联查询)”