# 函数列
通常情况下实体类中的属性为对应表字段的一个映射,这是一一照应的。如果想在实体中属性映射一个函数进行数据获取,则可以使用函数列声明@FuncColumn及@FuncColumns
# 注解说明
@FuncColumns可以声明多个@FuncColumn,每个@FuncColumn可以设置属性forDb进行指定这个函数表达式所应用的数据库,这样兼容多种数据库函数达到目标一致的查询。
默认情况下forDb=DbEnum.ANY,表示适合所有数据库。
public class Student {
@SnowflakeId
private Long id;
@AttributeOptions(typeHandler = JsonTypeHandler.class)
private Map<String, Object> parents;
@FuncColumn(expression = "${parents} ->> '$.fatherName'") // 提取JSON字段值
private String fatherName;
@Transient
private Map<String, Object> params;
public Map<String, Object> getParams() {
return params == null ? (params = new HashMap<>()) : params;
}
}
表达式中可以使用${}引用实体的属性,或直接是表列名,框架会优化查当前实体中有没同名属性,如果有则映射属性的表列名,否则认为就是列名。
即使是直接使用表字段名,也建议使用${}引起来,因为多表关联查询时,引起来的字段/属性会自动添加上表的别名,避免发生字段名冲突的可能性。
← 动态实体与mapper 开发参考 →