日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 将json转换成sql_search-sqlparams

發布時間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 将json转换成sql_search-sqlparams 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

json形式查詢的設計與解析

對json形式的查詢條件,解析成對應sql中的where條件部分。即有點類似mongodb的json查詢的設計

例子:

1最簡單的方式

{

"a.id@>":12

}

解析后的sql條件為: a.id>12

2模糊查詢

{

"a.name@like":"%lg%"

}

解析后的sql條件為: a.name like '%lg%'

3in not 類似的查詢

{

"a.id@in":[1,2,3]

}

解析后的sql條件為: a.id in (1,2,3)

4時間查詢

{

"a.updateTime@time>":"2015-3-1"

}

解析后的sql條件為 : unix_timestamp(a.updateTime) > 1425139200

5多條件查詢,條件之間默認是and的關系

{

"a.id@>":12,

"b.name":"lg"

}

解析后的sql條件為: a.id>12 and b.name='lg'

6多條件嵌套查詢,$or 表示里面的查詢條件是 or 的關系

{

"c.age@>":14,

"$or":{

"b.id@=":2,

"d.age@

}

}

解析后的sql條件為: c.age>14 and (b.id=2 or d.age<23)

7復雜的多條件嵌套查詢

{

"a.name":"lg",

"$or":{

"b.age@>=":24,

"c.id":1,

"$and":{

"a.id@>":12,

"b.id@

}

}

}

解析后的sql條件為 : a.name='lg' and (b.age>=24 or c.id=1 or (a.id>12 and b.id<34) )

#案例

對于json形式的查詢,可以先轉化成map結構的參數,然后使用如下:

DefaultSqlParamsHandler defaultSqlParamsHandler=new DefaultSqlParamsHandler();

String sqlWhere=defaultSqlParamsHandler.getSqlWhereParams(map結構的參數));

上述方式直接輸出對應的sql拼接形式,即 a.id>24 這樣的一個字符串結果

如果想使用占位符,則使用如下:

DefaultSqlParamsHandler defaultSqlParamsHandler=new DefaultSqlParamsHandler();

SqlParamsParseResult sqlParamsParseResult=defaultSqlParamsHandler.getSqlWhereParamsResult(map結構的參數);

System.out.println("testNormal:"+sqlParamsParseResult.getBaseWhereSql());

System.out.println("testNormal:"+sqlParamsParseResult.getArguments());

解析結果的類型為:SqlParamsParseResult,它的baseWhereSql屬性是 a.id>? 這樣的字符串,它的arguments則是參數集合如 [24]

測試案例1如下:

@Test

public void testNormal(){

Map params=new HashMap();

params.put("a.name","lg");

params.put("b.age@>=",2);

System.out.println("--------------------------------------");

System.out.println("testNormal:"+defaultSqlParamsHandler.getSqlWhereParams(params));

SqlParamsParseResult sqlParamsParseResult=defaultSqlParamsHandler.getSqlWhereParamsResult(params);

System.out.println("testNormal:"+sqlParamsParseResult.getBaseWhereSql());

System.out.println("testNormal:"+sqlParamsParseResult.getArguments());

}

輸出結果為:

testNormal:b.age >= 2 and a.name = 'lg'

testNormal:b.age >= ? and a.name = ?

testNormal:[2, lg]

測試案例2如下:

@Test

public void testAndOr(){

Map params=new HashMap();

Map sonParams=new HashMap();

sonParams.put("b.name","李四");

sonParams.put("c.age@

params.put("a.name","lg");

params.put("$or",sonParams);

System.out.println("--------------------------------------");

System.out.println("testAndOr:"+defaultSqlParamsHandler.getSqlWhereParams(params));

SqlParamsParseResult sqlParamsParseResult=defaultSqlParamsHandler.getSqlWhereParamsResult(params);

System.out.println("testAndOr:"+sqlParamsParseResult.getBaseWhereSql());

System.out.println("testAndOr:"+sqlParamsParseResult.getArguments());

}

輸出結果為:

testAndOr:(c.age < 4 or b.name = '李四') and a.name = 'lg'

testAndOr:(c.age < ? or b.name = ?) and a.name = ?

testAndOr:[4, 李四, lg]

測試案例3如下:

@Test

public void testAndOrComplex(){

Map params=new HashMap();

Map sonParams=new HashMap();

Map sonSonParams=new HashMap();

sonSonParams.put("d.name","王五");

sonSonParams.put("e.age@>=",12);

sonParams.put("b.name","李四");

sonParams.put("c.age@

sonParams.put("$and",sonSonParams);

params.put("a.name","lg");

params.put("$or",sonParams);

System.out.println("--------------------------------------");

System.out.println("testAndOrComplex:"+defaultSqlParamsHandler.getSqlWhereParams(params));

SqlParamsParseResult sqlParamsParseResult=defaultSqlParamsHandler.getSqlWhereParamsResult(params);

System.out.println("testAndOrComplex:"+sqlParamsParseResult.getBaseWhereSql());

System.out.println("testAndOrComplex:"+sqlParamsParseResult.getArguments());

}

輸出結果為:

testAndOrComplex:((e.age >= 12 and d.name = '王五') or c.age < 4 or b.name = '李四') and a.name = 'lg'

testAndOrComplex:((e.age >= ? and d.name = ?) or c.age < ? or b.name = ?) and a.name = ?

testAndOrComplex:[12, 王五, 4, 李四, lg]

#自定義擴展

@> @ in @ time> 這些都是內部定義的一些操作符。如果用戶想使用自定義的操作符,可以如下操作:

第一步: 實現SqlParamsParser接口,實現自己的解析器

第二步: 向DefaultSqlParamsHandler注冊自定義的解析器,即調用它的registerSqlParamsHandler(SqlParamsParser sqlParamsParser)方法即可

具體怎么實現,參考其中的實現類(還是很簡單的)。

目前內置的解析器接口及其實現類如下:

總結

以上是生活随笔為你收集整理的java 将json转换成sql_search-sqlparams的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。