美文网首页
后台页面多条件过滤以及筛选

后台页面多条件过滤以及筛选

作者: ProudLin | 来源:发表于2019-08-27 10:56 被阅读0次

    分配到这样一个需求,让我实现一个后台页面,不仅仅有条件搜索还有一些添加过滤。

    我琢磨着,又可以复制粘贴了,按照之前大佬的模板去搜索,后面排查确认了一下,完蛋了,有一些搜索字段是要另一个数据库里。

    意味着要跨库联合查询,大佬说,如果跨库联合查询,难度大性能会下降很多,建议冗余字段。

    也就是在一张主表里冗余这些多余的字段。

    1、先找到这些原有数据的来源,进行后续数据同步,也就是所谓的维护。

    2、后期要修复数据,毕竟是新增的,得写一条SQL修补数据(当然,别忘记先增加SQL字段)

    eg:update A表 a inner join D库.C表 c on a.id = c.id set s.字段=c.字段 , s.字段=c.字段;

    二、条件搜索之日期

    需求里面:筛选新增【日期】,最多31天

    理论上来说,前端传一个字符串格式的时间给我即可,如:2019-8-27

    但后端得特殊处理,比如开始时间和结束时间,后面必须精确到秒,如果前端传来开始和结束都为 2019-8-27。

    那么后端必须处理成:2019-8-27 00:00:00 和 2019-8-27 23:59:59

    由现成的工具类可以实现 :

         * 取一天最大的时间
         *
         * @param date
         * @return
         */
        public static Date ceiling(Date date) {
            if (date == null) {
                return null;
            }
            SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
            String day = sm.format(date) + " 23:59:59";
            return parseStringToDate(day, "yyyy-MM-dd HH:mm:ss");
        }
    
        /**
         * 取一天最小的时间
         *
         * @param date
         * @return
         */
        public static Date floor(Date date) {
            if (date == null) {
                return null;
            }
            SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
            String day = sm.format(date) + " 00:00:00";
            return parseStringToDate(day, "yyyy-MM-dd HH:mm:ss");
        }
    
    

    三、多条件过滤筛选

    image.png

    这种查询的情况比较多种,要考虑可能为空,模糊查询等。

    假设这些数据都是在同一张表里,可以写一个 DTO 类封装返回数据,例如:

    "select new DTO 类(数据1,数据2,数据3,....) from S表 s where (?1 is null or s.id= ?1 ) and (?2 is null or (s.字段2 like concat('%',?2,'%'))) and (?3 is null or (s.字段3 like concat('%',?3,'%'))) and " +
                "(s.字段4= ?4 or ?4 is null) and (?5 is null or s.时间字段 >= ?5) and (?6 is null or s.时间字段 <= ?6) and (s.字段7= ?7 or ?7 is null) and s.deleted = 0")
    

    相关文章

      网友评论

          本文标题:后台页面多条件过滤以及筛选

          本文链接:https://www.haomeiwen.com/subject/wjlsectx.html