自定义综合查询实现

自定义综合查询实现

当前需求

需要自定义查询条件来查询特定数据,然后导出。之前为直接数据库查询导出,现需要做前端可视化界面,让用户可以自定义筛选条件进行数据查询。

例如:用户筛选年龄数据 有时候需要查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
     */
    

使用

  1. 对应的查询接口服务继承BaseDynamicQueryService
  2. 查询接口服务实现BaseDynamicQueryService的查询和导出方法
  3. 前端需要增加对应的参数传递。

前端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”:“”

}

]

}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值