Ver Fonte

first commit

wyd há 1 dia atrás
commit
3a526e2571

+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 129 - 0
pom.xml

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.5.6</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>org.example</groupId>
+    <artifactId>TQYB</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>TQYB</name>
+    <description>TQYB</description>
+    <url/>
+    <licenses>
+        <license/>
+    </licenses>
+    <developers>
+        <developer/>
+    </developers>
+    <scm>
+        <connection/>
+        <developerConnection/>
+        <tag/>
+        <url/>
+    </scm>
+    <properties>
+        <java.version>17</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- MyBatis集成 -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version> <!-- 使用最新的稳定版本 -->
+        </dependency>
+
+        <!-- 数据库驱动 -->
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+            <!-- Gson: Java to Json conversion -->
+            <dependency>
+                <groupId>com.google.code.gson</groupId>
+                <artifactId>gson</artifactId>
+                <version>2.8.9</version> <!-- 请检查并使用最新版本 -->
+            </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20210307</version> <!-- 使用最新版本或你需要的版本 -->
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+        <resource>
+            <directory>src/main/resources</directory>
+            <includes>
+                <include>**/*.properties</include>
+                <include>**/*.xml</include>
+            </includes>
+            <filtering>false</filtering>
+        </resource>
+    </resources>
+    </build>
+</project>

+ 15 - 0
src/main/java/org/example/tqyb/TqybApplication.java

@@ -0,0 +1,15 @@
+package org.example.tqyb;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("org.example.tqyb.mapper")
+public class TqybApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(TqybApplication.class, args);
+    }
+
+}

+ 20 - 0
src/main/java/org/example/tqyb/bean/CityBean.java

@@ -0,0 +1,20 @@
+package org.example.tqyb.bean;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.stereotype.Component;
+
+@Component //用来让Spring管理这个类
+@Data
+@Getter
+@Setter
+public class CityBean {
+
+    @JsonProperty(value = "id")
+    private String id;
+    @JsonProperty(value = "city_name")
+    private String city_name;
+
+}

+ 20 - 0
src/main/java/org/example/tqyb/controller/CityController.java

@@ -0,0 +1,20 @@
+package org.example.tqyb.controller;
+
+import org.example.tqyb.service.CityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class CityController {
+
+    @Autowired
+    private CityService cityService;
+
+    @GetMapping("/city")
+    public String getCity() throws Exception {
+        for (int i = 1; i <= 34; i++){
+            cityService.getCity(i+"");
+        }
+        return "成功";
+    }
+}

+ 21 - 0
src/main/java/org/example/tqyb/controller/WeatherController.java

@@ -0,0 +1,21 @@
+package org.example.tqyb.controller;
+
+import org.example.tqyb.service.WeatherService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+public class WeatherController {
+
+    @Autowired
+    private WeatherService weatherService;
+
+    @GetMapping("/weather")
+    public Object getWeather(@RequestParam String city_name, @RequestParam String date) throws Exception {
+        return weatherService.getWeather(city_name,date);
+    }
+}

+ 18 - 0
src/main/java/org/example/tqyb/mapper/CityMapper.java

@@ -0,0 +1,18 @@
+package org.example.tqyb.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.example.tqyb.bean.CityBean;
+
+import java.util.List;
+
+@Mapper
+public interface CityMapper {
+
+    //添加城市信息
+    int instercity(@Param("id") String id,@Param("city_name") String city_name);
+
+    //查询城市信息
+    List<CityBean> selectcity(@Param("city_name") String city_name);
+
+}

+ 71 - 0
src/main/java/org/example/tqyb/service/CityService.java

@@ -0,0 +1,71 @@
+package org.example.tqyb.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.example.tqyb.mapper.CityMapper;
+import org.example.tqyb.utils.TypeConverter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class CityService {
+
+    @Autowired
+    private CityMapper cityMapper;
+
+
+    public String getCity(String cityId) throws Exception {
+        String apiKey = "32da14fc72a9aaca0a1b0ab73eaf10d9";
+        String apiUrl = "http://v.juhe.cn/hisWeather/citys";
+        HashMap<String, String> map = new HashMap<>();
+        map.put("key", apiKey);
+        map.put("province_id", cityId);
+
+        URL url = new URL(String.format("%s?%s", apiUrl, params(map)));
+        BufferedReader in = new BufferedReader(new InputStreamReader((url.openConnection()).getInputStream()));
+        String inputLine;
+        StringBuffer response = new StringBuffer();
+        while ((inputLine = in.readLine()) != null) {
+            response.append(inputLine);
+        }
+        in.close();
+        Map<String, Object> map1 = parseJson(response);
+        Object city_name = map1.get("result");
+        List<Map<String, Object>> list = TypeConverter.toListMap(city_name);
+        for (int i = 0; i < list.size(); i++){
+            cityMapper.instercity(list.get(i).get("id").toString(),list.get(i).get("city_name").toString());
+        }
+        return "提交成功";
+    }
+
+    public static String params(Map<String, String> map) {
+        return map.entrySet().stream()
+                .map(entry -> {
+                    try {
+                        return entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.toString());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return entry.getKey() + "=" + entry.getValue();
+                    }
+                })
+                .collect(Collectors.joining("&"));
+    }
+
+    public Map<String, Object> parseJson(StringBuffer buffer) throws IOException {
+        ObjectMapper mapper = new ObjectMapper();
+        return mapper.readValue(buffer.toString(), new TypeReference<>() {
+        });
+    }
+
+}

+ 75 - 0
src/main/java/org/example/tqyb/service/SearchHttpAK.java

@@ -0,0 +1,75 @@
+package org.example.tqyb.service;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.example.tqyb.utils.TypeConverter;
+import org.springframework.web.util.UriUtils;
+
+public class SearchHttpAK {
+    public String getStationCityMap (String city_name) throws Exception {
+        String URL = "https://api.map.baidu.com/place/v2/search?";
+        String AK = "MnEfIWXMWkzeLYYBZhTloInTkGrybrHk";
+        SearchHttpAK snCal = new SearchHttpAK();
+
+        Map params = new LinkedHashMap<String, String>();
+        params.put("query", city_name);
+        params.put("tag", "火车站");
+        params.put("region", "全国");
+        params.put("output", "json");
+        params.put("ak", AK);
+        return snCal.requestGetAK(URL, params);
+    }
+    public String requestGetAK(String strUrl, Map<String, String> param) throws Exception {
+        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
+            return "";
+        }
+
+        StringBuffer queryString = new StringBuffer();
+        queryString.append(strUrl);
+        for (Map.Entry<?, ?> pair : param.entrySet()) {
+            queryString.append(pair.getKey() + "=");
+            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
+        }
+
+        if (queryString.length() > 0) {
+            queryString.deleteCharAt(queryString.length() - 1);
+        }
+
+        java.net.URL url = new URL(queryString.toString());
+        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
+        httpConnection.connect();
+
+        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
+        BufferedReader reader = new BufferedReader(isr);
+        StringBuffer buffer = new StringBuffer();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            buffer.append(line);
+        }
+        Map<String, Object> map1 = parseJson(buffer);
+        Object city_name = map1.get("results");
+        List<Map<String, Object>> list = TypeConverter.toListMap(city_name);
+
+        reader.close();
+        isr.close();
+        if (list.get(0).get("city") != null && list.get(0).get("city").toString().length() > 0) {
+            return list.get(0).get("city").toString();
+        }
+       return "";
+    }
+    public Map<String, Object> parseJson(StringBuffer buffer) throws IOException {
+        ObjectMapper mapper = new ObjectMapper();
+        return mapper.readValue(buffer.toString(), new TypeReference<>() {
+        });
+    }
+}

+ 112 - 0
src/main/java/org/example/tqyb/service/WeatherService.java

@@ -0,0 +1,112 @@
+package org.example.tqyb.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.example.tqyb.mapper.CityMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+@Service
+public class WeatherService {
+
+    @Autowired
+    private CityMapper cityMapper;
+
+    public List<Integer> getWeather(String city_name, String date) throws Exception {
+        String apiKey = "32da14fc72a9aaca0a1b0ab73eaf10d9";
+        String apiUrl = "http://v.juhe.cn/hisWeather/weather";
+        SearchHttpAK snCal = new SearchHttpAK();
+        Map<String, Object> tq = new HashMap<>();
+
+        // 处理多个城市输入(用逗号或中文逗号分隔)
+        if (city_name.contains(",") || city_name.contains(",")) {
+            String str1 = city_name.replace(",", ",");
+            String[] str = str1.split(",");
+            for (String s : str) {
+                handleCityWeather(snCal, s.trim(), date, apiKey, apiUrl, tq);
+            }
+        } else {
+            handleCityWeather(snCal, city_name.trim(), date, apiKey, apiUrl, tq);
+        }
+
+        // 解析 night_temp 的数字并返回 List<Integer>
+        List<Integer> nightTemps = new ArrayList<>();
+        Pattern pattern = Pattern.compile("night_temp=([0-9]+)");
+        for (Object value : tq.values()) {
+            String weatherStr = value.toString();
+            Matcher matcher = pattern.matcher(weatherStr);
+            if (matcher.find()) {
+                nightTemps.add(Integer.parseInt(matcher.group(1)));
+            }
+        }
+
+        return nightTemps;
+    }
+
+    /**
+     * 查询单个城市的天气并存入 tq
+     */
+    private void handleCityWeather(SearchHttpAK snCal, String cityName, String date,
+                                   String apiKey, String apiUrl, Map<String, Object> tq) throws Exception {
+        String city_name1 = snCal.getStationCityMap(cityName).replace("市", "");
+
+        if (!city_name1.isEmpty()) {
+
+
+        String city_id = cityMapper.selectcity(city_name1).get(0).getId();
+
+        HashMap<String, String> map = new HashMap<>();
+        map.put("key", apiKey);
+        map.put("city_id", city_id);
+        map.put("weather_date", date);
+
+        URL url = new URL(String.format("%s?%s", apiUrl, params(map)));
+        BufferedReader in = new BufferedReader(new InputStreamReader((url.openConnection()).getInputStream(), StandardCharsets.UTF_8));
+        String inputLine;
+        StringBuilder response = new StringBuilder();
+        while ((inputLine = in.readLine()) != null) {
+            response.append(inputLine);
+        }
+        in.close();
+
+        Map<String, Object> map1 = parseJson(response);
+        if ("查询成功".equals(map1.get("reason"))) {
+            tq.put(city_name1, map1.get("result").toString());
+        } else {
+            tq.put(city_name1, map1.get("reason").toString());
+        }
+    }
+    }
+    public static String params(Map<String, String> map) {
+        return map.entrySet().stream()
+                .map(entry -> {
+                    try {
+                        return entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.toString());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return entry.getKey() + "=" + entry.getValue();
+                    }
+                })
+                .collect(Collectors.joining("&"));
+    }
+
+    public Map<String, Object> parseJson(StringBuilder buffer) throws IOException {
+        ObjectMapper mapper = new ObjectMapper();
+        return mapper.readValue(buffer.toString(), new TypeReference<Map<String, Object>>() {
+        });
+    }
+}

+ 44 - 0
src/main/java/org/example/tqyb/utils/TypeConverter.java

@@ -0,0 +1,44 @@
+package org.example.tqyb.utils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.core.type.TypeReference;
+
+import java.io.IOException;
+import java.util.*;
+
+public class TypeConverter {
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    /**
+     * 通用转换方法:支持多种数据类型转List<Map>
+     * @param source 待转换对象(支持String/Collection/Array/POJO)
+     * @return List<Map<String, Object>> 转换结果
+     * @throws IOException 解析异常
+     */
+    public static List<Map<String, Object>> toListMap(Object source) throws IOException {
+        // 处理字符串类型(JSON格式)
+        if (source instanceof String) {
+            return mapper.readValue(
+                    (String) source,
+                    new TypeReference<List<Map<String, Object>>>() {}
+            );
+        }
+        // 处理集合类型(如List<POJO>)
+        else if (source instanceof Collection) {
+            return ((Collection<?>) source).stream()
+                    .map(item -> mapper.convertValue(item, new TypeReference<Map<String, Object>>() {}))
+                    .toList();
+        }
+        // 处理数组类型
+        else if (source.getClass().isArray()) {
+            return Arrays.stream((Object[]) source)
+                    .map(item -> mapper.convertValue(item, new TypeReference<Map<String, Object>>() {}))
+                    .toList();
+        }
+        // 处理单个POJO对象(转为单元素List)
+        else {
+            Map<String, Object> map = mapper.convertValue(source, new TypeReference<Map<String, Object>>() {});
+            return Collections.singletonList(map);
+        }
+    }
+}

+ 15 - 0
src/main/resources/application.properties

@@ -0,0 +1,15 @@
+spring.application.name=TQYB
+server.port=9999
+
+
+# ???url
+#spring.datasource.url=jdbc:mysql://117.62.238.129:13306/lstq
+#?????ip
+spring.datasource.url=jdbc:mysql://172.22.4.172:3306/lstq
+# ??????
+spring.datasource.username=root
+# ?????
+#spring.datasource.password=jingang@mysql
+#???????
+spring.datasource.password=Jingang@123
+mybatis.mapper-locations=classpath:mapper/*.xml

+ 60 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="false">
+    <property name="log.path" value="/home/data/logs"/>
+    <property name="log.name" value="tqyb"/>
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="${CONSOLE_LOG_PATTERN:-%(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %(${LOG_LEVEL_PATTERN:-%5p}) %(${PID:- }){magenta} %(---){faint} %([%15.15t]){faint} %(%-40.40logger{39}){cyan} %(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
+    <conversionRule conversionWord="wex"
+                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
+    <conversionRule conversionWord="wEx"
+                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
+    <!-- Console log output -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Log file debug output -->
+    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/${log.name}.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/${log.name}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+            <maxFileSize>50MB</maxFileSize>
+            <maxHistory>30</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Log file error output -->
+    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+            <maxFileSize>50MB</maxFileSize>
+            <maxHistory>30</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+    </appender>
+
+    <logger name="org.activiti.engine.impl.db" level="DEBUG">
+        <appender-ref ref="debug"/>
+    </logger>
+
+
+    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
+    <root level="INFO">
+        <appender-ref ref="console"/>
+        <appender-ref ref="debug"/>
+    </root>
+</configuration>

+ 13 - 0
src/main/resources/mapper/CityMapper.xml

@@ -0,0 +1,13 @@
+<?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="org.example.tqyb.mapper.CityMapper">
+    <insert id="instercity" parameterType="org.example.tqyb.bean.CityBean">
+        INSERT INTO lstq_city(id, city_name) VALUES (#{id}, #{city_name})
+    </insert>
+
+    <select id="selectcity" resultType="org.example.tqyb.bean.CityBean">
+        SELECT id FROM lstq_city WHERE city_name = #{city_name}
+    </select>
+</mapper>

+ 13 - 0
src/test/java/org/example/tqyb/TqybApplicationTests.java

@@ -0,0 +1,13 @@
+package org.example.tqyb;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class TqybApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}