- 2张表innerJoin + order by
public void innerJoinQuery(){
//单表查询时 不指定select的字段 默认为selectAll
//关联查询时 不指定select字段 则没有默认的字段 必须指定需要查询的字段
//关联时 where 条件跟在各自表Query后
TestDeptQuery queryA = TestDeptQuery.emptyQuery().select.deptName().deptId().end();
TestCompanyQuery queryB = TestCompanyQuery.emptyQuery().selectAll();
JoinQuery joinQuery = JoinBuilder.from(queryA)
.join(queryB).on(a -> a.where.companyId(), b -> b.where.companyId()).endJoin()
.build();
joinQuery.orderBy.desc(TestCompanyMapping.companyId).end();
//任意一个mapper接口 执行关联查询
//listEntity 是自己扩展的方法 可以指定查询结果映射成任意实体对象 或者 json对象
List<JSONObject> list = companyMapper.listEntity(joinQuery, JSONObject.class);
int i = 0;
}
2023-08-03 22:42:56.988 [http-nio-6443-exec-2] [f78a7a30-209a-46b2-b714-805dbda70275] [192.168.3.8] INFO com.project.global.interceptor.MybatisInterceptor intercept 72 -
id:com.project.mybatis.busi.mapper.TestCompanyMapper.listMaps,执行sql耗时:47 ms
完整SQL信息:
SELECT a_1.`DEPT_NAME`, a_1.`DEPT_ID`,
a_2.`COMPANY_ID`, a_2.`COMPANY_NAME`, a_2.`CREATE_TIME`, a_2.`UPDATE_TIME`
FROM `test_dept` a_1
JOIN `test_company` a_2
ON a_1.`COMPANY_ID` = a_2.`COMPANY_ID`
ORDER BY `COMPANY_ID` DESC
从日志中可以看出,执行查询时,自动加了表的别名
- 3张表的left join ,且自定义别名+ 自由关联 + order by
在JoinQuery中,默认的on关联 都是from的表 去关联leftJoin的表
如果需要一个leftJoin的表 去关联另外一个leftJoin的表 则需要自定义表的别名 并使用onApply手写关联字段,并指定字段所属表的别名
public void leftJoinQuery(){
Long testCompanyId = 12L;
TestEmployeeQuery queryA = TestEmployeeQuery.emptyQuery("a").select.name().end();
TestDeptQuery queryB = TestDeptQuery.emptyQuery("b").select.deptName().deptId().end();
TestCompanyQuery queryC = TestCompanyQuery.emptyQuery("c")
.select.companyName().companyId().end()
.where
//可以动态判定参数状态后 再决定是否拼接 where条件
.companyId().eq(testCompanyId, If::notNull)
.end();
JoinQuery joinQuery = (JoinQuery) JoinBuilder.from(queryA)
//on 第1个参数是from表 第2个参数是leftJoin的表
.leftJoin(queryB).on(a -> a.where.deptId(),b -> b.where.deptId()).endJoin()
//如果需要 自由定义那个表的A字段和哪个表的A字段关联 可以使用onApply 注意要加上自定义的别名
.leftJoin(queryC).onApply("b.COMPANY_ID = c.COMPANY_ID").endJoin()
.build()
;
joinQuery.orderBy.desc(TestCompanyMapping.companyId).end();
List<JSONObject> list = companyMapper.listEntity(joinQuery, JSONObject.class);
int i = 0;
}
2023-08-03 23:11:51.036 [http-nio-6443-exec-3] [055faff2-6dd4-4931-bca5-b7cdabbc28b3] [192.168.3.8] INFO com.project.global.interceptor.MybatisInterceptor intercept 72 -
id:com.project.mybatis.busi.mapper.TestCompanyMapper.listMaps,执行sql耗时:41 ms
完整SQL信息:
SELECT a.`NAME`,
b.`DEPT_NAME`, b.`DEPT_ID`,
c.`COMPANY_NAME`, c.`COMPANY_ID`
FROM `test_employee` a
LEFT JOIN `test_dept` b ON a.`DEPT_ID` = b.`DEPT_ID`
LEFT JOIN `test_company` c ON b.COMPANY_ID = c.COMPANY_ID
WHERE c.`COMPANY_ID` = 12 ORDER BY `COMPANY_ID` DESC