Skip to content

复杂的join 例子

join相同表

java
List<SysUser> list=QueryChain.of(sysUserMapper)
    .innerJoin(SysUser::getId,1,SysUser::getRole_id,2)
    .list();

join子查询

join子查询 - 方式1(推荐)

java
List<SysUser> list=QueryChain.of(sysUserMapper)
    .select(SysUser.class)
    .from(SysUser.class)
    //不需要on的时候 
    .innerJoin(SysUser::getRole_id, SysRole::getId, (query, subQuery) -> {
        subQuery.select(SysRole::getName);
        query.select(subQuery, SysRole::getName);
        query.orderBy(subQuery, SysRole::getId);
    })
    //需要on参数 用于追加on条件的时候    
    .innerJoin(SysUser::getRole_id, SysRole::getId, (query, subQuery, on) -> {
        subQuery.select(SysRole::getId, SysRole::getName);
        query.select(subQuery, SysRole::getName);
        query.orderBy(subQuery, SysRole::getId);
    })    
    .list();

join子查询 - 方式2

java
SubQuery subQuery=SubQuery.create("sub")
    .select(SysRole.class)
    .from(SysRole.class)
    .eq(SysRole::getId,1);

List<SysUser> list=QueryChain.of(sysUserMapper)
    .select(SysUser.class)
    .from(SysUser.class)
    .innerJoin(SysUser.class,subQuery,on->on.eq(SysUser::getRole_id,subQuery.$outerField(SysRole::getId)))
    .list();

返回2张相同表字段

java
List<SysUserVO> list=QueryChain.of(sysUserMapper)
    .select(SysUser.class)
    .select(SysUser.class,2)   
    .from(SysUser.class)
    .innerJoin(SysUser::getId,1,SysUser::getRole_id,2)
    .returnType(SysUserVO.class)    
    .list();