项目中mybatis-plus中利用QueryWrapper对象自定义查询条件实现
1.自定义数据过滤的方法
@Override
public QueryWrapper dataScopeFilter(Long sysUserId,String userAlias,String companyAlias){
1).根据用户id sysUserId查询用户
//如果查询的用户读取数据的范围等于设定值 则组装一个QueryWrapper对象
if (GlobalConfig.DATA_SCOPE_COMPANY_AND_CHILD.equals(oaSysRole.getDataScope())) {
qw.eq(String.format("%s.%s", officeAlias, companyAlias), sysUser.getCompanyId());
qw.or();
qw.likeRight(String.format("%s.%s", companyAlias, parentIds), this.getParentIds(sysUser.getCompanyId()) + sysUser.getCompanyId() + ",");
} else if (GlobalConfig.DATA_SCOPE_COMPANY.equals(oaSysRole.getDataScope())) {
qw.eq(String.format("%s.%s", companyAlias, officeId), sysUser.getCompanyId());
qw.or();
qw.eq(String.format("%s.%s", companyAlias, parentId), sysUser.getCompanyId());
qw.eq(String.format("%s.%s", companyAlias, type), EOffIceType.dept.getValue());
}
return qw;
}
2.自定义mapper的查询方法
将上一步返回的对象作为参数传递给mapper的查询方法。
List<Long> ods = sysGetOfficeIdListMapper.selectOfficeList(queryWrapper);
interface中
List<Long> selectOfficeList(@Param(Constants.WRAPPER) Wrapper wrapper);
xml文件中
<select id="selectOfficeList" resultType="java.lang.Long">
SELECT
DISTINCT oso.office_id AS office_id
FROM
sys_office AS oso
LEFT JOIN oa_sys_user_role AS osur ON osu.sys_user_id = osur.user_id
LEFT JOIN oa_sys_role AS osr ON osur.role_id = osr.role_id
${ew.customSqlSegment}
</select>
${ew.customSqlSegment} 会替换成参数中queryWrapper对象的条件,从而组装成一个完整的sql进行查询。