后端排序优化——谁调用,谁排序

news2024/12/23 14:41:31

前言

        为了使排序更加灵活,建议后端排序可以优化为“谁调用谁排序”。

代码实现

数据库设计

        以学生表为例。

         前端查询条件为姓名,住址。

Controller

        简化后的controller层代码如下:

/**
     * queryStudent[查询学生]
     * @param name 姓名
     * @param address   住址
     * @param extendSort    排序
     * @param paging    是否分页
     * @param page  第几页
     * @param size  页大小
     * @return java.lang.Object
     */
    @RequestMapping(value = "/query",method={RequestMethod.GET,RequestMethod.POST})
    public  Object queryStudent(
            @RequestParam("name")String name,@RequestParam("address")String address,
            @RequestParam(value = "extendSort", required = false) String extendSort,
            @RequestParam("paging")Boolean paging, @RequestParam("page")Integer page,
            @RequestParam("size")Boolean size
    ) {
        if(paging){
            PageInfo<Student> pageInfo = studentServer.queryStudentPageInfo(name,address,extendSort,page, size);
            return JSON.toJSONString(pageInfo);
        }else{
            return JSON.toJSONString(studentServer.queryStudent(name,address,extendSort));
        }
    }

ServiceImpl

        简化后的serviceImpl层代码如下:

         1.分页查询。

    @Override
    public PageInfo<Student> queryStudentPageInfo(String name,String address,
            String extendSort,Integer page,Integer size) {
        PageHelper.startPage(page, size);
        // 在此定义排序规则,不在sql中定义,因为有的sql没有必要进行排序,比如count(*).谁调用谁排序
        PageHelper.orderBy(stringExtendSort.convertString(extendSort, "a", Student.class));
        // 定义查询的Map
        Map<String,Object> queryMap = new HashMap<>(16);
        queryMap.put("name",name);
        queryMap.put("address",address);
        return new PageInfo<>(studentMapper.queryStudentByMap(queryMap));
    }

        2.不分页查询

/**
     * queryStudent[查询学生,不分页]
     * @param name
     * @param address
     * @param customSort 自定义排序字段
     */
     @Override
     public List<Student> queryStudent(String name,String address,String customSort) {
        // 定义查询的Map
        Map<String,Object> queryMap = new HashMap<>(16);
        queryMap.put("name",name);
        queryMap.put("address",address);
        queryMap.put("customSort",stringExtendSort.convertString(customSort, "a", Student.class));
        return studentMapper.queryStudentByMap(queryMap);
    }

Mapper.xml

<select id="queryStudentByMap" parameterType="java.util.Map" resultMap="Student">
        select a.id,
        a.name,
        a.address,
        a.age
        from test_student a
        <where>
            <if test="id != null">
                and a.id = #{id}
            </if>
            <if test="name != null and name != ''">
                and a.name like CONCAT('%', #{name}, '%')
            </if>
            <if test="address != null and address != ''">
                and a.address like CONCAT('%', #{address}, '%')
            </if>
            <if test="age != null">
                and a.age = #{age}
            </if>
        </where>
        <choose>
            <when test="customSort !=null and customSort != ''">
                order by ${customSort}
            </when>
            <otherwise>
                
            </otherwise>
        </choose>
    </select>

·文中提到的"stringExtendSort"属于保密代码,不便公示,请自行编写。

总结

        其核心思想就是谁调用,谁排序,增加了代码的灵活性和可持续扩展性质。同时也减少了数据库开销。实际开发时,需要的问题往往更加复杂,建议根据实际情况进行扩充。

【2023-07】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL优化——update优化

1.update优化 执行update语句的时候一定要根据索引字段进行更新&#xff0c;否则就会出现行锁升级为表锁的情况&#xff0c;锁住整张表&#xff0c;一旦锁表了并发性能就会受影响。 2.总结 sql优化事实上都是对索引进行优化

【Git】—— 解决分支合并冲突

在实际分⽀合并的时候&#xff0c;并不是想合并就能合并成功的&#xff0c;有时候可能会遇到代码冲突的问题。 为了演⽰这问题&#xff0c;创建⼀个新的分⽀ dev1 &#xff0c;并切换⾄⽬标分⽀&#xff0c;我们可以使⽤ git checkout - b dev1 ⼀步完成创建并切换的动作…

网卡收发包系统结构收发包流程,tcp/ip协议,socket套接字缓冲区,滑动窗口,mtu/mss

MTU和MSS的区别 MTU和MSS的区别 TCP 的 MTU & MSS MTU是在那一层&#xff1f;MSS在那一层&#xff1f; MTU是在数据链路层的载荷大小也就是传给网络层的大小&#xff0c;mss是在传输层的载荷大小也就是传给应用层的大小 mss是根据mtu得到的 1、MTU&#xff1a; Maximu…

矩阵置零(力扣)思维 JAVA

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 输入&#xff1a;matrix [[0,1,2,0],[3,4,5,2],[…

Django项目之模型

Django项目之模型 创建环境配置连接MySQL数据库创建表单注册模型Django模型类查询模型类的条件查询聚合函数 创建环境 创建Django项目&#xff0c;创建usersapp&#xff0c;并在setting.py中注册 项目工作目录 配置连接MySQL数据库 修改/Djweb/Djweb/setting.py中DATABASE…

netty知识集锦2

粘包半包 粘包半包解决方案&#xff0c; 1短链接&#xff0c;它的消息边界是从链接建立到链接断开 2.定长解码器&#xff1a;服务器端选最大长度的消息作为定长&#xff0c;客户端不足补齐&#xff0c;缺点造成浪费 netty协议设计与解析 Message编码解码

[DASCTF 2023 0X401七月暑期挑战赛] REV1 controlflow复现

这东西没怎么研究过&#xff0c;不过很多人都完成了&#xff0c;不过这种比赛有很多应该是拿的别人的wp&#xff0c;所以减去些水份&#xff0c;赛后拿到一个wp是人c程序实现的。然后根据原代码还原一下加密流程。 首先是main 这里比较特殊&#xff0c;一开始的3个变量明显是加…

VS2010打开VC6工程进行调试时的问题解决方法

VS2010打开VC6工程进行调试时的问题解决方法 在工程属性页&#xff0c;“配置属性—链接器—输入—忽略特定默认库” 中添加编译时提示无法找到的几个lib库&#xff0c;如下图所示

【iOS】App仿写--管理系统

文章目录 前言一、账号界面二、功能界面三、添加功能四、删除功能五、更改功能六、查找功能七、排序功能八、退出功能总结 前言 在日常生活中&#xff0c;如果用文字来记述与管理我们数据会十分麻烦&#xff0c;并且人工成本较高&#xff0c;这里笔者给出一种管理系统的模版&a…

DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)

DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作&#xff09; 文章目录 DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作&#…

中医-十二经-图

&#x1f33c;十二经-图 &#x1f354;十二经&#x1f36d;任脉、督脉&#x1f957;冲脉、带脉&#x1f96a;阴维、阳维&#x1f368;资源下载 &#x1f354;十二经 &#x1f36d;任脉、督脉 &#x1f957;冲脉、带脉 &#x1f96a;阴维、阳维 &#x1f368;资源下载 如果需要…

SESSION,TOKEN和Postman的使用

SESSION&#xff1a;它是存储在服务端的 1、客户端输入账户和密码&#xff0c;登录成功&#xff0c;在服务端生成一个SESSIONID同时存储在服务端&#xff08;DB or Redis&#xff09; 2、服务端把生成的SESSIONID通过响应头中的Set-Cookie返回给客户端 3、再系统下个请求中&…

机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案

一、RTFuse市场应用背景 面对工业自动化领域对视觉运动控制低代码、低门槛的市场应用需求日益增加&#xff0c;正运动特此推荐一款RTFuse快组态软件&#xff0c;以满足这一需求&#xff0c;使机器视觉运动控制项目开发变得更加简单易用。 RTFuse快组态软件&#xff0c;内置的…

GnuWin32,Windows下使用Linux命令

1. 前言 昨天我写了一篇 UnxUtils工具包&#xff0c;Windows下使用Linux命令 的文章&#xff0c;今天无意间又发现了 GnuWin32 &#xff0c;它提供Win32版本的GNU工具&#xff08;Linux下的命令基本都有&#xff09;。 你可以在 GnuWin32 Files 手动下载你想要的命令安装包。 …

centos7 访问windows系统的共享文件夹

window系统上共享文件夹 选择共享文件夹&#xff0c;点击属性 点击共享 选择用户&#xff0c;点击共享 centos系统挂载共享文件夹 创建挂载目的文件夹 mkdir -p /mnt/smb 挂载命令 mount -t cifs -o usernamezenglg,password*** //192.168.1.10/ftp /mnt/smb/其中&#xff…

新星计划打卡学习:VUE3组合式API

目录 1、vue3组件页面的构成 2、setup选项 3、reactive 4、ref 最后 1、vue3组件页面的构成 从上到下依次是 逻辑、结构、样式 2、setup选项 经过语法糖的封装更简单的使用组合式api <script setup> // 经过语法糖的封装更简单的使用组合式api const message t…

SpringCloudAlibaba微服务实战系列(三)Sentinel1.8.0+流控

SpringCloudAlibaba–Sentinel Sentinel被称为分布式系统的流量防卫兵&#xff0c;是阿里开源流量框架&#xff0c;从服务限流、降级、熔断等多个纬度保护服务。Sentinel同时提供了简洁易用的控制台&#xff0c;可以看到接入应用的秒级数据&#xff0c;并可以在控制台设置一些…

Cookie 和 Session 区别——2023最新面试精简版本

Cookie 和 Session 的区别 原理&#xff1a;从”登录“过程看Jwt和Token&#xff0c;以及区分Cookie和Session概念 面试&#xff1a; 好的&#xff0c;面试官。 我先解释一下 Cookie&#xff0c;它是客户端浏览器用来保存服务端数据的一种机制。 当通过浏览器进行网页访问的时…

Redis原理篇(一)

一、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 Redis虽由C语言开发&#xff0c;不过Redis没有直接使用C语言中的字符串&#xff0…

vulnhub靶机Thales:1

Thales:1 靶机地址&#xff1a;Thales: 1 ~ VulnHub 主机发现 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.135 nmap -sV -sT -O -p22,8080 192.168.21.135 简单的漏洞的扫描 nmap --scriptvuln -p22,8080 192.168.21.135 答题思路就是从8080端口拿到账号密…