Skip to content

ResultCalcField 注解 VO映射 - 字段映射

说明

用于计算字段等,例如count sum等等;加上此注解,在调用.select(VO.class) 时会自动select count(1)、sum(xx);

支持注解范围

支持字段、set方法上注解,同时支持字段、方法覆盖行为

属性说明

属性是否可空默认值说明
value计算sql值,例如 count(1),sum(id)或者动态 sum({id})
target对应的实体类,不写时,自动选择类上面@ResultEntity里的实体类
storey-1存储层级,联表自己join自己时使用,一般不用管;-1 时 ,如果相同的实体类,则继承上层的 storey值,否则默认为1
as设置别名,用于需要自定义该计算sql的列别名

配置方式一:数据库函数

java
@ResultCalcField("count(1)")
private Integer count1;

如果都是通用的数据库函数;推荐此方式

配置方式二:ORM 函数

java
@ResultCalcField("[count(if(in(id,1,2,3),NULL(),1))]")
private Integer count1;

SQL如下: COUNT((CASE WHEN t.id IN (1 , 2 , 3) THEN NULL ELSE 1 END))

支持各种ORM函数

更多ORM函数,请前往db.sql.api.impl.cmd.Methods 查看

如何用?

java
@Data
@ResultEntity(SysUser.class)
public class SysUserVo {
    
    @ResultCalcField("count(1)")
    private Integer count1;

    @ResultCalcField("count(id)")
    private Integer countId;

    @ResultCalcField("count({"+SysUser.Fields.id+"})")
    private Integer countId2;
}
java
@Service
public class Test{

    @Autowired
    private SysUserMapper sysUserMapper;

    public void demo() {
        Pager<SysUserVo> pager = QueryChain.of(sysUserMapper)
                .eq(SysUser::getId,1)
                .like(SysUser::getUserName,"xxx")
                .groupBy(SysUser::getId)
                .returnType(SysUserVo.class)
                .paging(Pager.of(1,10));
    }
}

其中 count({id}) 中的 {id}表示动态id的列名;配置注解属性 target storey进行动态value sql生成