sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

数据查询表达式 type@ne@i

2018-03-28
sybn

简介

当我们需要把http请求参数, 组装成 sql where 条件时, 经常会遇到可选参数问题, 页面上有 10 个参数, 填了几个就几个条件.

此时一般会使用 mybatis 的 xml 或者 jpa 的 query 来解决.

本工具包已提供的与以上两种方式近似的 xml 和 query 方案, 但是在实际使用中发现还是不够满足需求.

在 es, mongo, presto, clickhouse 等数据库中 1 != “1”, 此时需要将 http 传输的 String 型参数转换为各种不同的数据类型.

创建查询 v:0.1.9

  • 可以使用如下方式创建 SybnQuery:
// 从请求参数中生成一个query
Map<String, String> request = new LinkedHashMap<>();
request.put("id@eq@i", "1"); // @i表示value是int
request.put("type@ne@i", "0");
request.put("day@gl", "2018-01-01~2018-04-19");
request.put("name@like", "aaa");

// 这个 query 支持转换为 spring jpa 等其他 orm 工具的 query 对象, 详情参考 spring-mvc-helper 子项目.
SybnQuery<?> query = SybnQueryMapFactory.newQuery(request);

// id = 1 and type != 0 and day between '2018-01-01' and '2018-04-19' and name like '%aaa%'
String sql = query.toSqlWhere();

语法

字段名@字段类型@比较符 如: user_status@eq@i 等效于 user_status=toInt(?)

可用比较符

  • re like 仅限字符串,仅限单个词,允许省略%
  • RE like 仅限字符串,多个词逗号分开,or关系,允许省略%
  • is/eq == 任意类型
  • ne <> 任意类型
  • gld/gl between A and B (20150601~20150601)
  • gldt between A and B (20150601000000~20150601235959)
  • gt > 仅限数字(@i或@l),注意:不支持日期
  • gte >= 仅限数字(@i或@l),注意:不支持日期
  • lt < 仅限数字(@i或@l),注意:不支持日期
  • lte <= 仅限数字(@i或@l),注意:不支持日期
  • in in 任意类型,多个词逗号分开,or关系
  • nin not in 任意类型,多个词逗号分开,and关系

参数类型

  • @s 字符串
  • @d 时间
  • @l 长整数
  • @i 整数
  • @b 布尔

数组

如果参数为逗号分隔的数组,则参数类型使用大写

如: user_id@I@in 等效于 user_id in (toInt(?), toInt(?), toInt(?)…)

范围查询

  • gl 等范围查询需要 2 个 between 条件, 此时应该用 ~ 作为分隔符.

  • 参数是 @d 表示时间时, 支持日常常用的时间格式

相关页面


Similar Posts

Comments

暂不开放评论! 可微信联系