自定义综合查询实现
当前需求
需要自定义查询条件来查询特定数据,然后导出。之前为直接数据库查询导出,现需要做前端可视化界面,让用户可以自定义筛选条件进行数据查询。
例如:用户筛选年龄数据 有时候需要查18岁以上的,或者18岁以下的,或者一个区间内的,所以常规的传参查询可能需要多个参数来进行判定进行业务查询。
常规查询不具备灵活性,所以需要实现自定义的筛选查询条件。
设计参考
参考navicat的筛选思路,将一些筛选条件前端可视化,转换为模块(表名)、列名(字段名)、操作类型(逻辑连接符),后端进行处理进行查询
代码结构图
当前实现功能描述
-
后端综合查询统一入口,前端调用服务需要传递相应的服务名(ServiceName),服务名如果目前没有特殊定义,取的是自定义服务实现的类名,首字母小写,如果前两个字母都是大写,则取对应类名。例:UserServiceImpl 则前端需要传递 serviceName 为 userServiceImpl。 TUserServiceImpl 则需要按原名字进行传递 TUserServiceImpl
-
参数统一处理,无需重复处理
-
该处理依赖mybatis-plus,如果项目没有引用,后续开发增加JdbcTemplate构造(暂未开发)
-
实现了部分where条件(条件参数对应如下) 和 升降序排序以及分页功能
/** * 自定义查询条件枚举类 * eq 等于 = * ne 不等于 <> * gt 大于 > * ge 大于等于 >= * lt 小于 < * le 小于等于 <= * like 模糊匹配 '%value%' * likeLeft 以 value 结尾匹配 '%value' * likeRight 以 value 开头匹配 'value%' * in in in * between 闭区间 between s and e */
使用
- 对应的查询接口服务继承BaseDynamicQueryService
- 查询接口服务实现BaseDynamicQueryService的查询和导出方法
- 前端需要增加对应的参数传递。
前端post请求 接口地址:/dynamicQuery/query
参数示例
{
"serviceName": "jwryJzdjServiceImpl",
"queryConditionList": [
{
//模块名(对应后台表名)
"modelName": "aaa",
//筛选字段名(拼接 aaa.bbb 对应sql查询条件字段名)
"modelField": "bbb",
"operation": "gt",
"value": "111"
},
{
"modelName": "aaa",
"modelField": "ccc",
"operation": "eq",
"value": "222"
},
{
"modelName": "aaa",
"modelField": "ccc",
"operation": "between",
"value": "222,333"
}
],
"orderByList": [
{
"modelName": "aaa",
"modelField": "ccc",
//默认 排序 asc 升序,可传desc 降序
"orderType":""
}
]
}
delName": “aaa”,
"modelField": "ccc",
//默认 排序 asc 升序,可传desc 降序
“orderType”:“”
}
]
}