Springboot 利用自定义注解+切面,实现 查询数据集合时主动加序列字段

利用自定义注解+切面,实现 查询数据集合时主动加序列字段, 只需要在Dao接口,方法上引入注解即可

import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  
  
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface AddSequence {  
    // 可以根据需要添加注解的属性  
}
import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.Around;  
import org.aspectj.lang.annotation.Aspect;  
import org.aspectj.lang.reflect.MethodSignature;  
import org.springframework.stereotype.Component;  
  
import java.lang.reflect.Method;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Map;  
import java.util.stream.IntStream;  
  
@Aspect  
@Component  
class AddSequenceAspect {  
  
    @Around("@annotation(com.yourpackage.AddSequence)") // 替换com.yourpackage为你的包名  
    public Object addSequenceToResult(ProceedingJoinPoint joinPoint) throws Throwable {  
        Object result = joinPoint.proceed(); // 执行原方法  
  
        if (result instanceof List) {  
            List<?> list = (List<?>) result;  
            if (!list.isEmpty() && list.get(0) instanceof Map) {  
                List<Map<String, Object>> mapList = new ArrayList<>();  
                IntStream.range(0, list.size())  
                        .forEach(i -> {  
                            Map<String, Object> map = (Map<String, Object>) list.get(i);  
                            Map<String, Object> newMap = new java.util.HashMap<>(map);  
                            newMap.put("rownum", i + 1); // 添加序号列  
                            mapList.add(newMap);  
                        });  
                return mapList;  
            }  
        }  
        return result; // 如果不是List或List为空或不是Map类型,直接返回原结果  
    }  
}

将上面代码放入你的工具类中,我们只需要在Dao接口的指定方法上添加@AddSequence注解, 它将会在返回结果中加上rownum序列字段. 我在上面工具类中,返回值定义的是List<Map<String,Object>>集合,如果你的事实体类,或Object对象,可仿照原先的进行扩展.

public interface xxxxDao {
	@AddSequence
	List<Map<String,Object>> getDataList(Map<String,Object> map);
}

运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 链表

一.链表的概念 链表是一个在物理存储单元中不连续&#xff0c;没有顺序的的存储结构&#xff0c;关于它的顺序是由链表中的指针链接实现的&#xff0c;是一种递归的数据结构&#xff0c;链表有一系列节点组成&#xff0c;而这些节点会在运行时动态生成。 节点包括两个部分&am…

【docker】查看并拷贝容器内文件

一、查询容器 查询所有容器 docker ps查询名为os11的容器 docker ps | grep os11查询名为os11的容器&#xff08;包含不运行的&#xff09; docker ps -a| grep os11 docker ps [option] 显示结果介绍如下&#xff1a; 参考&#xff1a;[https://blog.51cto.com/u_15009374/31…

工厂投产、电池装车,广汽能上动力电池行业的“餐桌”吗?

文 | 智能相对论 作者 | 沈浪 “如果你不在餐桌上&#xff0c;你就会出现在菜单上。”在某种程度上&#xff0c;追逐效益的动力电池行业正在上演着布林肯的“餐桌菜单论”。 于是&#xff0c;我们可以看到&#xff0c;尽管整体的动力电池市场被宁德时代、比亚迪、LG新能源、…

怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷

随着汽车“智能化”浪潮的推进&#xff0c;汽车的智能化水平正在持续刷新行业认知。在这股智能化潮流中&#xff0c;智能座舱作为客户体验最为直观的部分&#xff0c;其重要性不言而喻。倘若座舱设备出现死机、黑屏、卡顿等现象&#xff0c;都将对客户的使用体验产生非常大的影…

领军量子时代!逾九成机构加盟「英伟达」生态系统

在2024年3月17日至21日举行的GTC大会上&#xff0c;芯片制造领军企业英伟达&#xff08;NVIDIA&#xff09;发布了一项革命性的云服务&#xff0c;专为推动量子计算研究而设计。这一新服务&#xff0c;名为英伟达量子云&#xff08;NVIDIA Quantum Cloud&#xff09;&#xff0…

外包干了15天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

C# winform修改背景图 控件双向绑定 拖拽打开图片

修改背景图 说明 这里我准备基于百度飞桨PaddleSeg项目的人像分割模块做一个人像抠图&#xff0c;这里顺便用上了双向绑定和图片拖拽打开。 下面就是示例&#xff1a; 用颜色替换 用背景图替换 保存成功后的图片 一、使用百度飞桨PaddleSeg //初始化 引擎engine new Padd…

掌握未来技术:国产openEuler 操作系统学习网站指南!

介绍&#xff1a;openEuler是一个开源的操作系统平台&#xff0c;由华为技术有限公司发起并维护。 首先&#xff0c;openEuler支持多种处理器架构&#xff0c;包括但不限于AArch64&#xff08;鲲鹏&#xff09;和x86-64&#xff0c;这使得它可以在多种硬件平台上运行&#xff0…

滴水逆向PE结构

1.操作系统是只能打开可执行文件 以4D 5A开头MZ 其他的txt都是什么wrod 都是在exe程序中打开的 txt啥的不是可执行文件 PE结构是分节的 一节一节 节省硬盘空间 32位中任何一个exe都有4g的虚拟内存 占内存空间大 给磁盘空间小 在硬盘空间紧密 在内存空间大 &#xff08…

设计模式 --4:工厂方法模式

总结 &#xff1a; 个人理解&#xff1a; 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 &#xff0c;每一次创建一个新的算法&#xff0c;都要修改原来的工厂类&#xff0c;这不符合 开放–封闭原则 将工厂类给抽象出来&#xff0c;让具体的算法…

appium自动化框架综合实践

结合前面的元素寻找、操作、unittest测试框架&#xff0c;搭建一个完整的自动化框架。本篇旨在框架设计、单机用例执行、输出报告&#xff0c;下篇继续实践Bat批处理执行测试、多设备并发测试。 框架功能 数据配置日志输出截图处理基础功能封装&#xff08;公共方法&#xff…

Java学习笔记NO.24

T1.完成理工超市系统的商品类及其子类的定义&#xff0c;实现“浏览商品”及“查看商品详情”功能 &#xff08;1&#xff09;商品类 public class Goods {public String name;public double price;public int count;public String desc;public Goods(String name, double p…

敏捷开发——第二次作业JS/服务器的部署

部署 Web 服务器 1. 安装 Apache HTTP 服务器并部署静态网页应用 ⭐⭐ 默认情况下&#xff0c;Apache 在 /var/www/html 目录下寻找要提供服务的文件。可以将静态网页文件放置在这个目录下 2.安装 Nginx 并部署静态页面应用 3. 实践部分 1. 2. 3. 在 /var/www/html 目录下…

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题&#xff0c;在众多缓解交通拥堵的策略中&#xff0c;提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制&#xff08;TSC&#xff09;方法&#xff0c;由于其静态的、基于规则的算法&#xff0c;无法完全适应城市交通不断变化的…

又一款代码神器,效率直接翻倍!免费的还是香啊!

前言 提到商汤科技&#xff0c;你可能仍然将其与“AI四小龙”、“计算机视觉领军企业”等标签联系在一起。然而&#xff0c;在ChatGPT与Sora赢得广泛关注后&#xff0c;商汤科技依托其深厚的人工智能技术基础&#xff0c;迅速开发出自己的大型模型及人工智能应用产品&#xff…

网络基础(一)初识

1、计算机网络背景 1.1、网络发展 1. 独立模式: 计算机之间相互独立&#xff1b; 2. 网络互联: 多台计算机连接在一起&#xff0c;完成数据共享&#xff1b; 3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 4. 广域网WAN: 将远隔千里的计算机都连在一起;…

Win11右键菜单定制

0.优化目标 优化成&#xff1a;右键菜单优化成全量菜单选项&#xff0c;并精简掉我不需要的菜单选项。 具体优化步骤&#xff1a; 1.win11菜单恢复到win10经典状态 win11右键菜单是缩水版的&#xff0c;需要再次点击“显示更多选项”才能找到自己想用到的选项&#xff0c;再…

国内ip切换是否合规?

在网络使用中&#xff0c;IP地址切换是一种常见的行为&#xff0c;可以用于实现隐私保护、访问地域限制内容等目的。然而&#xff0c;对于国内用户来说&#xff0c;IP地址切换是否合规一直是一个备受关注的话题。在中国&#xff0c;网络管理严格&#xff0c;一些IP切换行为可能…

什么是数据中心常用的ping指令?有什么作用和功能?

什么是ping指令&#xff0c;它的作用是什么&#xff1f; ping是一种计算机网络工具&#xff0c;用于测试网络连接是否正常&#xff0c;以及确定网络延迟和丢包情况。ping的运作原理是向目标主机传出一个ICMP的请求回显数据包&#xff0c;并等待接收回显回应数据包。程序会按时…

基于java+springboot+vue实现的自习室座位管理系统(文末源码+Lw+ppt)23-491

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;自习室座位管理系统当然不能排除在外。自习室座位管理系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及SpringBo…