直接跳到内容

切面参数增强

技术交流QQ群:3549030

分页查询切面参数增强

普通的需求利用Kongfu封装的queryPage即可,但有时候,遇到特殊情况需要对查询的结果做相关处理,比如根据需要做一些限定条件,这个条件不通过前端,在后端加入呢?我们的做法是采用切面增强的方式来达到目的。

下面我们用用户管理模块的分页查询为例来讲解用法。

用户管理分页查询

通过切面增强处理,实现一个需求:不允许查询管理员用户信息,防止数据被随意设置,而造成系统无法访问。

代码实现如下:

java
@Api(value = "系统用户表", tags = "系统用户表接口")
@Path("/sys-user")
public class SysUserController extends KungfuController {
    public void queryPage() {
        // 通过切面增强处理
        QueryCondition qc = toDTO(QueryCondition.class);
        // 这里使用了三元组数据结构(字段名,字段值,条件类型)
        qc = wapperQueryCondition(qc, new Triple<>("userCode", "admin", "neq"));
        
        renderJson(R.ok("data", queryPage(SysUser.class, qc)));
    }

}

Kungfu封装了两种形式,单个条件增强和批量条件增强,上面例子属于单个条件增强,批量条件增强用法如下:

java

public QueryCondition wapperQueryCondition(QueryCondition qc, List<Triple<String, String, String>> paramTripleList); 

三元组结构在有些场景下还是非常有用的,是提高代码的复用的一个典型案例。实现类如下:

java
public class Triple<T, U, V> {

    private final T first;
    private final U second;
    private final V third;

    public Triple(T first, U second, V third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }

    public T getFirst() { return first; }
    public U getSecond() { return second; }
    public V getThird() { return third; }
}

有没有发现,很简单的样子。

切面参数增强已经加载完毕