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.mzph.cn/news/655951.shtml

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

相关文章

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一&#xff1a;低估产品开发 技术维度二&#xff1a;低估规模生产的复杂性 技术维度三&#xff1a;测试不足 技术维度四&#xff1a;产品太复杂 技术维度五&#xff1a;对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

vue3封装el-pagination分页组件

1、效果如图&#xff1a; 2、分页组件代码&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"><el-paginationv-model:current-page"page.currentPage"v-model:page-size"page.pageSize…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华&#xff1b;liuzhiyuan&#xff1b;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

github添加 SSH 密钥

1 打开终端 输入 ssh-keygen -t rsa -b 4096 -C "github邮箱地址"如果不需要密码可以一路回车 出现这个页面就是生存成功了 open ~/.ssh // 打开.ssh 找到id_rsa.pub复制出内容新建ssh密钥输入内容,保存即可

网络安全|重大失误!微软被盗测试账号拥有公司Office 365管理员权限

微软网络近期遭黑客入侵&#xff0c;高管电子邮件被监视长达两个月。 一位研究员表示&#xff0c;黑客通过获取一个拥有管理员权限的老旧测试帐号的访问权限来实施入侵&#xff0c;这是微软犯下的重大失误。 微软在1月25日&#xff08;上周四&#xff09;发布第二篇公告&…

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

vue3 + antd 封装动态表单组件(三)

传送带&#xff1a; vue3 antd 封装动态表单组件&#xff08;一&#xff09; vue3 antd 封装动态表单组件&#xff08;二&#xff09; 前置条件&#xff1a; vue版本 v3.3.11 ant-design-vue版本 v4.1.1 我们发现ant-design-vue Input组件和FormItem组件某些属性支持slot插…

数据写入HBase(scala)

package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …

Tensorflow2.0笔记 - tensor的padding和tile

本笔记记录tensor的填充和tile操作&#xff0c;对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…

猫咪不吃东西怎么办?排行榜上适口性好、性价比高的生骨肉冻干推荐

猫咪不吃东西怎么办&#xff1f;遇到这类情况需要主人去观察猫咪的情况&#xff0c;如果猫咪除了不吃猫粮还出现了呕吐、腹泻、体温异常等其他情况就要考虑猫咪是不是生病了。如果排除了疾病原因&#xff0c;猫咪不吃东西怎么办&#xff1f;可能是猫粮的口感不佳&#xff0c;使…

【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…

1月23日&#xff0c;老子云正式发布全新版本。此次新版本包含多板块功能上线和升级&#xff0c;为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容&#xff01; 1月23日&#xff0c;老子云正式发布全新版本。此次新版本…

Matlab plot绘图的 title 语法

x 0:1:10; >> y x.^2 -10*x15; >> plot(x,y) >> title(x_y, interpreter, none) title 里面的 x_y , y不会被当作下标。

STL初识——string的用法

string 一.string的介绍二.string的使用2.1接口&#xff08;构造类型&#xff09;2.2string的遍历和访问第一种遍历方式第二种遍历方式补充&#xff08;反向迭代器&#xff09;rbeign&#xff0c;rend 2.2接口&#xff08;常用函数&#xff09;2.2.1反转字符串&#xff08;reve…

Windows系统安装OpenSSH+VS Code结合内网穿透实现远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

私域必看:让你事半功倍的多微信高效管理方法

随着私域运营的需求不断增长&#xff0c;对于使用微信进行运营的企业或个人&#xff0c;高效地管理微信变得越发重要。今天就分享一些高效管理多个微信账号的实用方法&#xff0c;帮你节省时间。 1.巧用标签和分组 微信的标签和分组功能&#xff0c;相信很多人都使用过&#xf…

c++入门语法—————引用,内联函数,auto关键字,基于范围的for循环,nullptr

文章目录 一.引用1.引例2.注意事项3.应用场景1.做参数&#xff08;a:输出型参数b:内容较大参数&#xff09;2.做返回值&#xff08;a:修改返回值&#xff0c;b:减少拷贝&#xff09; 4.引用和指针的区别 二.内联函数1.为什么有内联函数2.用法和底层3.特性 三.auto关键字1.基础示…

R语言(数据导入,清洗,可视化,特征工程,建模)

记录一下痛失的超级轻松的数据分析实习&#xff08;线上&#xff09;&#xff0c;hr问我有没有相关经历&#xff0c;我说我会用jupyter book进行数据导入&#xff0c;清洗&#xff0c;可视化&#xff0c;特征工程&#xff0c;建模&#xff0c;python学和用的比较多&#xff0c;…

[计算机提升] 删除空间占用大的文件(夹)

5.3 删除空间占用大的文件(夹) 5.3.1 hiberfil.sys 说明&#xff1a; 该文件是系统休眠文件。 对策&#xff1a; 使用CMD命令&#xff1a;powercfg -h off关闭休眠&#xff0c;然后重启电脑后该文件则会自动删除。但是电脑以后没有了休眠功能。读者可以根据实际情况进行取舍。…

从理论到实践,如何用TRIZ破解研发中的技术难题?

自科技飞速发展以来&#xff0c;技术问题层出不穷&#xff0c;成为许多企业和研究机构研发过程中难以突破的瓶颈。然而&#xff0c;有一个强大的工具&#xff0c;能帮助我们解决这些问题&#xff0c;那就是TRIZ。 一、TRIZ是什么 TRIZ&#xff0c;全称是"发明问题解决理…