处理一个查询参数,实现mysql的高级复合查询

分享 0 118
绝尘
绝尘 2018-06-14 17:38

背景需求:

一个查询参数,查询全站数据

场景一:网站首页的搜索,一个搜索框要查询整个网站中相关的数据,

处理这个需求有两个步骤:

  1. 1、给输入的内容做分词
  2. 2、使用分词模糊查询数据库

场景二:管理后台,一个输入框输入一个自己的表达式,精确匹配出相关数据,

这种场景的数据处理流程:

  1. 1、根据需求制定 查询表达式
  2. 2、解析参数,生成相应的sql或者查询条件(其实都是废话,和场景一没什么不一样)


下面主要介绍的是一个场景二的代码案例:

查询字符串: 

String str = "字符1 && 字符2 && 字符3 || 字符4 && 字符5 || 字符6";

处理得到结果:

and ((title=? and title=? and title=?) or(title=? and title=?) or(title=?))
["字符1","字符2","字符3","字符4","字符5","字符6"]

Java字符串处理:

public static String r(String str){

StringBuffer sql = new StringBuffer();
List<String> para = new ArrayList<>();
sql.append(" and (");
for (String x : str.split("[|][|]")) {
sql.append("(");
for (String t : x.split("&&")) {
sql.append("title=? and ");
para.add(t.trim());
}
sql.delete(sql.length()-5, sql.length());
sql.append(") or");
}
sql.delete(sql.length()-3,sql.length());
sql.append(")");

Gson gson = new Gson();
System.out.println(sql.toString());
System.out.println(gson.toJson(para));

return sql.toString();
}


另外注意,Java中的 竖线分割应该如下使用

str.split("[|]") 或者 str.split("[|][|]")


更多个性查询规则,可相应定制,  


博客地址:https://1216.top 码云/GitHub:https://gitee.com/tc608
还有不明白?追问
  • 消灭零回复
本周热帖
没有相关数据