DoydoQuery v2
首页GitHub
简体中文
简体中文
  • 项目介绍
  • 快速上手
  • 基础用法
    • 增删查改接口
    • 中间表访问接口
    • 数据库方言
    • 分表增删查改
    • 打印SQL日志
  • 实体对象映射
    • 实体对象
    • 关联实体
  • 查询对象映射
    • 查询对象构建
    • 谓词后缀字段
    • 逻辑后缀字段
    • 子查询字段
    • ER关系字段
    • 自定义字段
    • 分页对象
  • 聚合查询
    • 视图对象
    • Having对象
    • 外连接
  • 相关资源
    • 文章
      • 从ORM到OQM:一种基于对象的SQL语句构造方案
由 GitBook 提供支持
在本页
  • 使用场景
  • 注解定义
  • 代码示例
  • 业务代码
  • 单元测试

这有帮助吗?

  1. 查询对象映射

自定义字段

使用场景

当现有的的字段后缀和注解都无法映射成需要的SQL语句时,可以考虑使用@QueryField注解。

注解定义

QueryField.java
@Target(FIELD)
@Retention(RUNTIME)
public @interface QueryField {
    String and();
}

当被注解字段的值满足过滤条件时,and变量里定义的条件语句将会被拼接到SQL中。

代码示例

业务代码

public class TestQuery extends PageQuery {
    @QueryField(and = "(username = ? OR email = ? OR mobile = ?)")
    private String account;
}

单元测试

@Test
void testQueryField() {
    TestQuery testQuery = TestQuery.builder().account("test").build();
    ArrayList<Object> argList = new ArrayList<>();

    String sql = BuildHelper.buildWhere(testQuery, argList);

    assertThat(sql).isEqualTo(" WHERE (username = ? OR email = ? OR mobile = ?)");
    assertThat(argList).containsExactly("test", "test", "test");
}
// passed

可以看到,TestQuery的account字段通过@QueryField注解定义的查询条件被原样拼接到where语句,并且因为查询条件里有3个占位符,account的值“test”也被添加了三次到argList。

上一页ER关系字段下一页分页对象

最后更新于2个月前

这有帮助吗?