DoydoQuery v2
首页GitHub
简体中文
简体中文
  • 项目介绍
  • 快速上手
  • 对象概念
    • 查询对象
      • 分页排序
      • 谓词后缀字段
      • 逻辑后缀字段
      • 子查询字段
      • ER关系字段
      • 自定义查询字段
    • 实体对象
      • 枚举字段
      • 分表
    • 视图对象
      • 列映射
    • 聚合查询对象
  • 基础用法
    • 增删查改接口
    • 中间表访问接口
    • 数据库方言
    • 打印SQL日志
  • Web
    • Controller
  • Service
  • 缓存
  • 排序参数
  • 校验
  • 用户注入
  • 相关资源
    • 文章
      • 从ORM到OQM:一种基于对象的SQL语句构造方案
由 GitBook 提供支持
在本页
  • 使用场景
  • 注解定义
  • 代码示例

这有帮助吗?

  1. 对象概念
  2. 查询对象

自定义查询字段

使用场景

当遇到现有的字段映射方法无法支持的SQL语句时,可以使用注解@QueryField自定义SQL语句,作为临时方案。

注解定义

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");
}

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

上一页ER关系字段下一页实体对象

最后更新于20天前

这有帮助吗?