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.hqwc.cn/news/439363.html

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

相关文章

动手学深度学习(一)深度学习介绍2

目录 二、起源 三、深度学习的成功案例&#xff1a; 四、特点&#xff1a; 五、小结&#xff1a; 二、起源 为了解决各种各样的机器学习问题&#xff0c;深度学习提供了强大的工具。 虽然许多深度学习方法都是最近才有重大突破&#xff0c;但使用数据和神经网络编程的核心思…

Scala入门01

Spark入门 1.入门 spark采用Scala语言开发 Spark是用来计算的 Scala掌握&#xff1a;特性&#xff0c;基本操作&#xff0c;集合操作&#xff0c;函数&#xff0c;模式匹配&#xff0c;trait&#xff0c;样例类&#xff0c;actor等内容。 2.内容讲解 2.1 Scala简介 在http…

2024-01-29 ubuntu 用脚本设置安装交叉编译工具链路径方法,设置PATH环境变量

一、设置PATH环境变量的方法,建议用~/.bash_profile的方法&#xff0c;不然在ssh登录的时候可能没有设置PATH. 二、下面的完整的脚本&#xff0c;里面的echo "export PATH$build_toolchain_path:\$PATH" >> $HOME/.bashrc 就是把交叉编译路径写写到.bashrc设置…

计算机毕业设计 基于SpringBoot的车辆违章信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

华为radius认证

组网需求 如图1所示&#xff0c;用户同处于huawei域&#xff0c;Router作为目的网络接入服务器。用户需要通过服务器的远端认证才能通过Router访问目的网络。在Router上的远端认证方式如下&#xff1a; Router对接入用户先用RADIUS服务器进行认证&#xff0c;如果认证没有响应…

链表--114. 二叉树展开为链表/medium 理解度C

114. 二叉树展开为链表 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而…

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上&#xff0c;后续会慢慢把注释都给加上&#xff0c;先看代码了解个大概&#xff08;待更新&#xff09; 前置&#xff1a; RendererAPI.h: #pragma once namespace YOTO {enum class RendererAPI {None 0,OpenGL1};class Renderer {public:inline static R…

join | join_any | join_none之间的区别

文章目录 前言一、join/join_any/join_none之间的区别总结 前言 本文主要记录一下&#xff0c;与fork想匹配的三个选项&#xff0c;join/join_any/join_none之间的区别。 一、join/join_any/join_none之间的区别 join&#xff0c;等到所有的子进程全部结束&#xff0c;才能继…

R语言学习case7:ggplot基础画图(核密度图)

step1: 导入ggplot2库文件 library(ggplot2)step2&#xff1a;带入自带的iris数据集 iris <- datasets::irisstep3&#xff1a;查看数据信息 dim(iris)维度为 [150,5] head(iris)查看数据前6行的信息 step4&#xff1a;画图展示 plot2 <- ggplot(iris,aes(Sepal.W…

Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】

RocksDB是Flink中用于持久化状态的默认后端&#xff0c;它提供了高性能和可靠的状态存储。然而&#xff0c;当处理大型状态并频繁读写时&#xff0c;可能会导致背压问题&#xff0c;因为RocksDB需要从磁盘读取和写入数据&#xff0c;而这可能成为瓶颈。 遇到的问题 Flink开发…

数据结构与算法教程,数据结构C语言版教程!(第六部分、数据结构树,树存储结构详解)六

第六部分、数据结构树&#xff0c;树存储结构详解 数据结构的树存储结构&#xff0c;常用于存储逻辑关系为 "一对多" 的数据。 树存储结构中&#xff0c;最常用的还是二叉树&#xff0c;本章就二叉树的存储结构、二叉树的前序、中序、后序以及层次遍历、线索二叉树、…

【Linux】Linux下多线程

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 前置&#xff1a;进程地址空间和页表1.1 如何看待进程地址空间和页表1.2 虚拟地址…