在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:APIJSONParser开源软件地址:https://gitee.com/sxran/APIJSONParser开源软件介绍:APIJSONParser
简介在APIJSON程序中,主要分三步:权限判断,解析生成SQL,包装成制定格式的响应 APIJSONParser是其中解析生成SQL过程的一个工具类,提供将制定格式的JSON对象转化生成一条标准的SQL,如果你想自定义格式,底层的框架也完全支持你进行自由扩展。 假设一个JSON是这样的: { "Product":{ "id":"1" }} 将上述的JSON解析到一个叫 APIJSONProvider apijsonProvider = new APIJSONProvider(obj); //一个APIJSON解析器拿到一个json对象apijsonProvider.setStatementType(StatementType.SELECT); //当前为查询模式,还支持新增,修改,删除System.out.println(SQLExplorer.getSQL(apijsonProvider).getText());//拿到SQL 之后会打印这样一句SQL SELECT Product.*FROM Product ProductWHERE (Product.id = '1') 通过对比,我们很容易发现,其中的奥秘。JSON中 如果你觉得这里的别名很怪异,想自己定义,你可以这样: { "Product:p":{ "id":"1" }} 结果: SELECT p.*FROM Product pWHERE (p.id = '1') 这里我们查询出来的是 { "Product:p":{ "@column":"id,code,name", "id":"1" }} 结果: SELECT p.id, p.code, p.nameFROM Product pWHERE (p.id = '1') 倘若,你想要给表加别名一样给字段也加个别名 { "Product:p":{ "@column":"id,code,name:productName", "id":"1" }} 结果: SELECT p.id, p.code, p.name as productNameFROM Product pWHERE (p.id = '1') 到现在为止,我们都是以 对于一个数值字段,我们要找出价格(price)300元以上的商品,我们可以这样 { "Product:p":{ "@column":"id,code,name,price", "price{}":">300" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.price > 300) 这里的 { "Product:p":{ "@column":"id,code,name,price", "price{}":">300,<1200" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.price > 300 AND p.price < 1200) 现在我们查询的范围是,300 < price < 1200,如果想要找,price <= 300或者price >= 1200的数据。 { "Product:p":{ "@column":"id,code,name,price", "price|{}":">300,<1200" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.price > 300 OR p.price < 1200)
例如,我们的商品 { "Product:p":{ "@column":"id,code,name,price", "brand_id{}": [1,4,5] }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.brand_id IN (1, 4, 5)) 如果要排除某些品牌,你可以 { "Product:p":{ "@column":"id,code,name,price", "brand_id!{}": [1,4,5] }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.brand_id NOT IN (1, 4, 5)) 此功能同样支持文本字段 如果想查看商品名称字段 { "Product:p":{ "@column":"id,code,name,price", "name~": "双11" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.name LIKE '%双11%') 如果你想自己调控 { "Product:p":{ "@column":"id,code,name,price", "name$": "%双11" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.name LIKE '%双11')
想使用正则的话 { "Product:p":{ "@column":"id,code,name,price", "code?": "^[0-9]+$" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE ( regexp_like(p.code,'^[0-9]+$')) 介于不同的数据库,函数名有一些区别,可按实际情况修改。 如果你想要排序,你可以这样 { "Product:p":{ "@column":"id,code,name,price", "name~": "双11", "@orders": "price-" }} 结果: SELECT p.id, p.code, p.name, p.priceFROM Product pWHERE (p.name LIKE '%双11%')ORDER BY p.price DESC
有时我们也要进行分组操作,比如找出双11商品中的最贵的商品 { "Product:p":{ "@column":"name,max(price):max_price", "name~": "双11", "@group": "name" }} 结果: SELECT p.name, max(p.price) as max_priceFROM Product pWHERE (p.name LIKE '%双11%')GROUP BY p.name 目前允许的函数没有进行控制,所有的单一参数的函数都可以使用。 单表查询的内容基本介绍完了,接下来是多表查询。 现在有两张表,零售表 第一种是使用 { "m_retail:r":{ "@column":"id,docno", "id": 18 }, "c_store:s":{ "id@":"/r/c_store_id", "@column":"code,name" }} 结果: SELECT r.id, r.docno, s.code as "s.code", s.name as "s.name"FROM m_retail r, c_store sWHERE (r.id = 18 AND r.c_store_id = s.id) 如果不使用 { "[]": { "c_store": { "@column": "code,name", "code": "C86L" }, "m_retail:r": { "@column": "id,docno" } }, "join": { "@innerJoin": [ "c_store.id=r.c_store_id" ] }} 结果: SELECT r.id, r.docno, c_store.code, c_store.nameFROM m_retail rINNER JOIN c_store ON c_store.id=r.c_store_idWHERE (c_store.code = 'C86L') 其他几种join的使用方法和这里演示的innerJoin是一样的。 现在支持的join有: @innerJoin@leftOuterJoin@rightOuterJoin@join@outerJoin 速查
一个叫
查询查询 { "test_apijson":{ "@column":"name", "code":"A001" }} 新增新增一行如ID=1的数据 { "test_apijson":{ "code":"A001", "name":"浦东区" }} ID是自动增长的,所以不需要再给ID赋值。 修改修改代码 { "test_apijson":{ "@code":"A002", "code": "B001" }} 删除删除 { "test_apijson":{ "code": "A002" }} 权限表权限表白名单: 表黑名单: 表的黑白名单的使用 apijsonProvider.getTableBlackList().add("Retail");
字段权限字段白名单: 字段黑名单: 字段的黑白名单的使用 apijsonProvider.getColumnWhiteList().add("retail.*");apijsonProvider.getColumnWhiteList().add("retail.amt"); 格式: 导入jar地址https://jitpack.io/#com.gitee.sxran/dyna-graph-ql/1.0.0 pom.xml 依赖To get a Git project into your build:Step 1. Add the JitPack repository to your build file <repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> Step 2. Add the dependency <dependency> <groupId>com.gitee.sxran</groupId> <artifactId>APIJSONParser</artifactId> <version>1.1.0-hutool</version> </dependency> 已接入项目:版本更新:1.0.0
1.1.0-hutool
|
请发表评论