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

这有帮助吗?

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

逻辑后缀字段

查询对象中,字段名称以And/Or结尾的字段被称为逻辑后缀字段。默认情况下,查询对象各个字段对应的查询条件之间通过AND连接,通过为字段定义And/Or后缀可以指定连接查询条件的逻辑运算符。定义如下:

public class UserQuery extends PageQuery {
    // ...

    private List<String> nameStartOr;
    private UserQuery userOr;
    private List<UserQuery> usersOr;

    private UserQuery userAnd;
}

后缀Or

当字段的名称以Or结尾时,连接查询条件的逻辑运算符为OR,支持以下三种字段类型:

  • List<String> nameStartOr;

UserQuery userQuery = UserQuery.builder().nameStartOr(List.of("Bob","John","Tim")).build();
List<UserEntity> users = userDataAccess.query(userQuery);
// SQL="SELECT id, name, score, memo, deleted FROM t_user 
// WHERE (name LIKE ? OR name LIKE ? OR name LIKE ?)" args="[Bob% John% Tim%]"
  • UserQuery userOr;

UserQuery userQuery = UserQuery.builder().nameStartOr(Arrays.asList(1, 4, 12)).deleted(trur).build();
List<UserEntity> users = userDataAccess.query(userQuery);
// SQL="SELECT id, name, score, memo, deleted FROM t_user 
// WHERE (id IN (?, ?, ?) OR deleted = ?)" args="[1 4 12 true]"
  • List<UserQuery> usersOr;

UserQuery userQuery = UserQuery.builder()
    .usersOr(List.of(
        UserQuery.builder().idIn(List.of(1L, 4L, 12L)).deleted(true).build(),
        UserQuery.builder().idGt(10L).deleted(false).build()
    )).build();
List<UserEntity> users = userDataAccess.query(userQuery);
// SQL="SELECT id, name, score, memo, deleted FROM t_user
// WHERE (id IN (?, ?, ?) AND deleted = ? OR id > ? AND deleted = ?)"
// args="[1 4 12 true 10 false]"

后缀And

当字段的名称以And结尾时,连接多个查询条件的逻辑运算符为AND。示例如下:

UserQuery userAnd = UserQuery.builder().idIn(List.of(1L, 4L, 12L)).deleted(false).build();
UserQuery userOr = UserQuery.builder().deleted(true).userAnd(userAnd).build();
UserQuery userQuery = UserQuery.builder().scoreLt(80).userOr(userOr).build();
List<UserEntity> users = userDataAccess.query(userQuery);
// SQL="SELECT id, name, score, memo, deleted FROM t_user
// WHERE score < ? AND (deleted = ? OR id IN (?, ?, ?) AND deleted = ?)"
// args="[80 true 1 4 12 false]"

相关文章

上一页谓词后缀字段下一页子查询字段

最后更新于4天前

这有帮助吗?

在DoytoQuery中怎么表达select * from t where id = ? or (name = ? and age = ?)