SpringBoot+SqlServer查询接口

SpringBoot+SqlServer查询接口

文章目录

  • SpringBoot+SqlServer查询接口
    • 1. pom环境配置
    • 2. common工具包
    • 3. 实体类+接口+映射
    • 4. Service层+Controller层

需求:根据站号查询前一个小时的所有数据,将数据返回格式为Map<String,List<Map<String,String>>>,即 首先是四个参数,每个参数中有12条数据(每5分钟一条数据,一小时12条),每条数据有参数:日期时间,该参数的值。

要求结果处理如下图:

image-20240128185839011

1. pom环境配置

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zhwy</groupId><artifactId>bdly-3dwind-query</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>bdly-3dwind-query Maven Webapp</name><url>http://maven.apache.org</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version></parent><dependencies><!--SQLServer连接--><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>4.0</version></dependency><!--Lombok引入--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><!--myabtis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!--web 支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--jsp页面使用jstl标签--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><!--用于编译jsp--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency><!--springboot用JPA连接mysql数据库--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><finalName>bdly-3dwind-query</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

2. common工具包

common工具包

结果返回Result.java

package com.zhwy.common;import lombok.Data;/*** @author xjz_2002* @version 1.0*/
@Data
public class Result<T> {//返回码private Integer code;//返回消息private String message;//返回数据private T data;public Result(){}// 返回数据protected static <T> Result<T> build(T data) {Result<T> result = new Result<T>();if (data != null)result.setData(data);return result;}public static <T> Result<T> build(T body, Integer code, String message) {Result<T> result = build(body);result.setCode(code);result.setMessage(message);return result;}public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static<T> Result<T> ok(){return Result.ok(null);}/*** 操作成功* @param data* @param <T>* @return*/public static<T> Result<T> ok(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.SUCCESS);}public static<T> Result<T> fail(){return Result.fail(null);}/*** 操作失败* @param data* @param <T>* @return*/public static<T> Result<T> fail(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.FAIL);}public Result<T> message(String msg){this.setMessage(msg);return this;}public Result<T> code(Integer code){this.setCode(code);return this;}
}

DataType 枚举类

package com.zhwy.common;import com.zhwy.pojo.SurfChnMulMin;import java.util.Map;import static com.zhwy.common.Tool.toStr;/*** @author xjz_2002* @version 1.0*/
public enum DataType {PRE("pre"), TEM("tem"), RHU("rhu"), WIN("win");private final String code;DataType(String code) {this.code = code;}// 基于数据类型填充数据的方法public void populateData(Map<String, String> dataMap, SurfChnMulMin scmm) {switch (this) {case PRE:dataMap.put(code, toStr(scmm.getPre()));break;case TEM:dataMap.put(code, toStr(scmm.getTem()));break;case RHU:dataMap.put(code, toStr(scmm.getRhu()));break;case WIN:dataMap.put("win_D", toStr(scmm.getWinDAvg2mi()));dataMap.put("win_S", toStr(scmm.getWinSAvg2mi()));break;// 根据需要添加更多数据类型}}
}

ResultCodeEnum 枚举返回结果类

package com.zhwy.common;import lombok.Getter;/*** @author xjz_2002* @version 1.0*/
@Getter
public enum ResultCodeEnum {SUCCESS(200,"成功"),FAIL(201, "失败"),SERVICE_ERROR(2012, "服务异常"),DATA_ERROR(204, "数据异常"),ILLEGAL_REQUEST(205, "非法请求"),REPEAT_SUBMIT(206, "重复提交"),ARGUMENT_VALID_ERROR(210, "参数校验异常"),LOGIN_AUTH(208, "未登陆"),PERMISSION(209, "没有权限"),ACCOUNT_ERROR(214, "账号不正确"),PASSWORD_ERROR(215, "密码不正确"),LOGIN_MOBLE_ERROR( 216, "账号不正确"),ACCOUNT_STOP( 217, "账号已停用"),NODE_ERROR( 218, "该节点下有子节点,不可以删除");private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code = code;this.message = message;}}

Tool 工具类

package com.zhwy.common;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;/*** @author xjz_2002* @version 1.0*/
public class Tool {public static String toStr(Object obj) {String result = "";if (obj == null) {result = "0";} else {result = obj.toString();}return result;}}

3. 实体类+接口+映射

pojo实体类 SurfChnMulMin.java

package com.zhwy.pojo;import com.fasterxml.jackson.annotation.JsonFormat;import java.io.Serializable;
import java.util.Date;public class SurfChnMulMin implements Serializable {private String stationIdC;private String stationName;private Date datetime;private Double pre;private Double tem;private Double rhu;private Double winDAvg2mi;private Double winSAvg2mi;public SurfChnMulMin() {}public SurfChnMulMin(String stationIdC, String stationName, Date datetime, Double pre, Double tem, Double rhu, Double winDAvg2mi, Double winSAvg2mi) {this.stationIdC = stationIdC;this.stationName = stationName;this.datetime = datetime;this.pre = pre;this.tem = tem;this.rhu = rhu;this.winDAvg2mi = winDAvg2mi;this.winSAvg2mi = winSAvg2mi;}public String getStationIdC() {return stationIdC;}public void setStationIdC(String stationIdC) {this.stationIdC = stationIdC;}public String getStationName() {return stationName;}public void setStationName(String stationName) {this.stationName = stationName;}@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")public Date getDatetime() {return datetime;}@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")public void setDatetime(Date datetime) {this.datetime = datetime;}public Double getPre() {return pre;}public void setPre(Double pre) {this.pre = pre;}public Double getTem() {return tem;}public void setTem(Double tem) {this.tem = tem;}public Double getRhu() {return rhu;}public void setRhu(Double rhu) {this.rhu = rhu;}public Double getWinDAvg2mi() {return winDAvg2mi;}public void setWinDAvg2mi(Double winDAvg2mi) {this.winDAvg2mi = winDAvg2mi;}public Double getWinSAvg2mi() {return winSAvg2mi;}public void setWinSAvg2mi(Double winSAvg2mi) {this.winSAvg2mi = winSAvg2mi;}
}

Mapper接口 ScmmMapper

package com.zhwy.mapper;import com.zhwy.pojo.SurfChnMulMin;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.Date;
import java.util.List;/*** @author xjz_2002* @version 1.0*/
@Mapper
public interface ScmmMapper{//获取最近一小时所有数据List<SurfChnMulMin> getScmmList(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("staId") String staId);//获取最新时间Date getScmmNewDate(@Param("staId") String staId);}

Resouces/mapper/ScmmMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.zhwy.mapper.ScmmMapper"><select id="getScmmList" resultType="com.zhwy.pojo.SurfChnMulMin">SELECT Station_Id_C,Station_Name,Datetime,PRE,RHU,TEM,WIN_D_Avg_2mi,WIN_S_Avg_2miFROM SURF_CHN_MUL_MINWHERE (Datetime &gt;= #{startTime} AND Datetime &lt;= #{endTime})AND Station_Id_C = #{staId}</select><select id="getScmmNewDate" resultType="java.util.Date">SELECT DatetimeFROM SURF_CHN_MUL_MINWHERE Station_Id_C = #{staId}AND Datetime = (SELECT MAX(Datetime)FROM SURF_CHN_MUL_MIN)</select></mapper>

4. Service层+Controller层

service层 ScmmService.java

package com.zhwy.service;import com.zhwy.common.Result;
import com.zhwy.mapper.ScmmMapper;
import com.zhwy.pojo.SurfChnMulMin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;/*** @author xjz_2002* @version 1.0*/
@Service
public class ScmmService {@ResourceScmmMapper scmmMapper;// 根据时间段和站号获取天气参数public List<SurfChnMulMin> getScmmByDateAndStaId(String times, String staId) {DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime endTimeDate = LocalDateTime.parse(times, dtf);LocalDateTime startTimeDate = endTimeDate.minusHours(1);String endTime = endTimeDate.format(dtf);String startTime = startTimeDate.format(dtf);return scmmMapper.getScmmList(startTime,endTime,staId);}//根据站号获取DB中最新时间public String getScmmNewDate(String staId){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date scmmNewDate = scmmMapper.getScmmNewDate(staId);return sdf.format(scmmNewDate);}}

Controller层 ScmmController.java

package com.zhwy.controller;import com.zhwy.common.DataType;
import com.zhwy.common.Result;
import com.zhwy.pojo.SurfChnMulMin;
import com.zhwy.service.ScmmService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;/*** @author xjz_2002* @version 1.0*/
@RestController
public class ScmmController {@ResourceScmmService scmmService;// 根据时间段和站号获取天气参数@RequestMapping(value = "/getScmmByDateAndStaIdEnum")public Result getScmmByDateAndStaId(String staId) {//获取数据库中最新日期时间String times = scmmService.getScmmNewDate(staId);//根据站号查询DB中近一小时所有数据List<SurfChnMulMin> scmmList = scmmService.getScmmByDateAndStaId(times, staId);//对返回结果进行格式处理Map<String, List<Map<String, String>>> resultMap = new HashMap<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for (DataType dataType : DataType.values()) {//dataList存放近一小时数据,根据天气参数返回该参数的值和日期时间List<Map<String, String>> dataList = new ArrayList<>();//遍历近一小时所有数据,进行处理for (SurfChnMulMin scmm : scmmList) {Map<String, String> dataMap = new HashMap<>();dataMap.put("datetime", sdf.format(scmm.getDatetime()));dataType.populateData(dataMap, scmm);dataList.add(dataMap);}resultMap.put(dataType.name().toLowerCase(), dataList);}return Result.ok(resultMap);}
}

application.yml 配置文件

image-20240129221751308

效果截图:

image-20240128185915764

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滴滴开源小程序框架 Mpx 新特性:局部运行时能力增强

Mpx 是滴滴开源的一款增强型跨端小程序框架&#xff0c;自 2018 年立项开源以来如今已经进入第六个年头&#xff0c;在这六年间&#xff0c;Mpx 根植于业务&#xff0c;与业务共同成长&#xff0c;针对小程序业务开发中遇到的各类痛点问题提出了解决方案&#xff0c;并在滴滴内…

Android中下载 HAXM 报错 Intel® HAXM installation failed,如何解决?

最近在搭建 Flutter 环境&#xff0c;但是在 Android Studio 中安装 Virtual Device 时&#xff0c;出现了一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructio…

基于ldap实现登录认证

最近开发的应用需要外协人员实现登录认证&#xff0c;外协人员的密码等信息已经录入到ldap, 需要连接ldap进行登录认证。下面先介绍一下登录的网络旅程图。 一.nginx实现AES加密 nginx请求处理入口&#xff08;前端请求为json格式&#xff09; location /aes {default_type te…

adb测试冷启动和热启动 Permission Denial解决

先清理日志 adb shell logcat -c 打开手机模拟器中的去哪儿网&#xff0c;然后日志找到包名和MainActivity adb shell logcat |grep Main com.Qunar/com.mqunar.atom.alexhome.ui.activity.MainActivity 把手机模拟器的去哪儿的进程给杀掉 执行 命令 adb shell am start -W…

方法、数组

方法 是语句的集合&#xff0c;在一起执行一个功能 它是解决一类问题的步骤的有序集合 包含于类或对象中 在程序中创建&#xff0c;在其他地方被引用 设计方法的原则&#xff1a;方法的本意是功能块&#xff0c;就是实现某一个功能的语句块的集合。设计时&#xff0c;最好保持…

Vue3+Vite使用Puppeteer进行SEO优化(SSR+Meta)

1. 背景 【笑小枫】https://www.xiaoxiaofeng.com上线啦 资源持续整合中&#xff0c;程序员必备网站&#xff0c;快点前往围观吧~ 我的个人博客【笑小枫】又一次版本大升级&#xff0c;虽然知道没有多少访问量&#xff0c;但我还是整天没事瞎折腾。因为一些功能在Halo上不太好实…

Unity中URP下额外灯角度衰减

文章目录 前言一、额外灯中聚光灯的角度衰减二、AngleAttenuation函数的传入参数1、参数&#xff1a;spotDirection.xyz2、_AdditionalLightsSpotDir3、参数&#xff1a;lightDirection4、参数&#xff1a;distanceAndSpotAttenuation.zw5、_AdditionalLightsAttenuation 三、A…

哪吒汽车与经纬恒润合作升级,中央域控+区域域控将于2024年落地

近日&#xff0c;在2024哪吒汽车价值链大会上&#xff0c;哪吒汽车与经纬恒润联合宣布合作升级&#xff0c;就中央域控制器和区域域控制器展开合作&#xff0c;合作成果将在山海平台新一代车型上发布。 哪吒汽车首席技术官戴大力、经纬恒润副总裁李伟 经纬恒润在智能驾驶领域拥…

Springboot自定义线程池实现多线程任务

1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…

MySQL原理(二)存储引擎(1)概述

一、存储引擎介绍 1、概念&#xff1a; &#xff08;1&#xff09;MySQL中的数据用各种不下同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎…

@Async结合CompletableFuture实现主线程阻塞,CompletableFuture并发执行任务

Async结合CompletableFuture实现主线程阻塞&#xff0c;CompletableFuture并发执行任务 项目开发中经常会遇到业务需要多任务处理的场景&#xff0c;比如目前我除了的业务就是如此。 我要提供给客户端一个批量查询第三方数据的接口&#xff0c;由于是调用第三方的接口&#xf…

正则表达式 文本三剑客

一 正则表达式&#xff1a; 由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通配符功能&#xff0c;但与通配符不同&#xff0c;通配符功能是用…

分享4款不能错过的修改照片尺寸的软件!

在当今这个数字化时代&#xff0c;照片已经成为我们分享生活、表达观点的重要方式。但是&#xff0c;你是否曾遇到过这样的问题&#xff1a;一张精美的照片因为尺寸不合适而无法在朋友圈中展现出最佳效果&#xff1f;不用担心&#xff0c;今天我们就来聊聊那些可以帮助你轻松修…

漏洞原理远程命令执行

漏洞原理远程命令/代码执行 远程命令执行函数&#xff08;Remote Command Execution Function&#xff09;是指在一个网络环境中&#xff0c;通过远程执行命令来控制另一个计算机系统或设备的功能。 远程命令执行函数可以通过网络协议&#xff08;如SSH、Telnet、RPC等&#x…

wpf 数据转换(Bytes 转 KB MB GB)

效果 后端 using ProCleanTool.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data;namespace P…

SkyWalking+es部署与使用

第一步下载skywalking :http://skywalking.apache.org/downloads/ 第二步下载es:https://www.elastic.co/cn/downloads/elasticsearch 注&#xff1a;skywalking 和es要版本对应&#xff0c;可从下面连接查看版本对应关系&#xff0c;8.5.0为skywalking 版本号 Index of /di…

keepalived+nginx双主热备(有问题私信)

keepalivednginx双主热备 前言keepalivednginx双主热备keepalivednginx双主热备部署安装nginx安装keepalived修改master节点的keepalived配置文件 修改backup节点的keeepalived配置文件配置keepalived主备配置keepalived双主热备 前言 有关keepalived和nginx的一些工作原理&am…

【蓝桥杯日记】复盘篇二:分支结构

前言 本篇笔记主要进行复盘的内容是分支结构&#xff0c;通过学习分支结构从而更好巩固之前所学的内容。 目录 前言 目录 &#x1f34a;1.数的性质 分析&#xff1a; 知识点&#xff1a; &#x1f345;2.闰年判断 说明/提示 分析&#xff1a; 知识点&#xff1a; &am…

RHCE练习3

1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/data网站访问教学资料www.openlab.com/mo…

python之组合数据类型-列表

列表操作 列表增删改查列表增加元素的方法列表删除元素的方法列表修改元素的方法列表查找元素的方法 列表其他常用方法列表的切片用法列表修改排序的方法列表的常用符号、常用函数 列表是什么&#xff1f; 列表是有序集合&#xff0c;列表可以一次性存储几个或几万个元素&#…