跑通一篇博客代码假装自己会Spring Boot

本文是《跑通一篇博客代码假装自己会Java》的父亲篇,如果直接头铁用Java代码写后端服务器,前后端的通信和数据库的管理都不方便。SpringBoot框架能快速搭建后端服务。

前文我们使用Socket和JDBC进行通信和数据库操作。本文我们使用http和mybatis进行通信和数据库操作。但在一切开始之前,需要安装Maven(apache-maven-3.8.2-bin.tar.gz),这玩意有点类似Python里面的pip,用来管理软件包的,mybatis就属于软件包的一种。

Maven解压之后:

如下图,在D:\maven\apache-maven-3.8.2\conf\settings.xml增加一行代码,并新建D:\maven\rep文件夹,这个文件夹是用来存放Maven管理的软件包的。

 ------------------搞定,开始新建SpringBoot项目-------------------

 Finish之后,打开File->Settings,如下配置Maven环境。

 配置完成后,配置项目的通信端口和数据库信息,打开src\main\resources\application.properties,填入信息(信息要用自己的,别照抄我的):

server.port = 8080

spring.datasource.url = jdbc:mysql://localhost:3306/caoyi
spring.datasource.username = root
spring.datasource.password = admin123
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

如果配置都正确的话,运行src\main\java\com\example\demo2\Demo2Application文件,结果如下,工程就没问题了。

 -------------------------------实现http通信和数据库操作------------------------------

 

工程路径文件如上图,我们需要注意的是这5个文件:myController.java、myMapper.java、myServicer.java、application.properties、pom.xml。

myController.javamyServicer.javamyMapper.java对应的是MVC设计模式的三层架构,control提供前端操作接口,service是后端业务逻辑,mapper是后端数据库底层操作。

application.properties上面说过是用来配置项目的初始信息的。

pom.xml是Maven的软件包配置文件,每一个<dependency>XXX</dependency>就是一个依赖包。

代码如下:

myController.java

package com.example.demo.controller;

import com.example.demo.servicer.myServicer;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class myController {
    @Autowired
    private myServicer m_service;

    @RequestMapping("function1")
    public String print(@RequestParam("str") String param_str) {
        System.out.println(param_str);
        return param_str;
    }

    @RequestMapping("function2")
    public List<JSONObject> func2(@RequestParam("sex") String param_sex) {
        return m_service.getData(param_sex);
    }
}

 myServicer.java

package com.example.demo.servicer;

import com.example.demo.mapper.myMapper;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class myServicer {
    @Autowired
    private myMapper m_mapper;

    public List<JSONObject> getData(String pSex) {
        return m_mapper.getData(pSex);
    }
}

 myMapper.java

package com.example.demo.mapper;

import net.sf.json.JSONObject;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface myMapper {

    @Select("select * from info where SEX=#{param_sex}")
    List<JSONObject> getData(@Param("param_sex") String param_sex);

}

 pom.xml

<?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>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo2</name>
    <description>demo2</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</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-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 -------------------------------测试-------------------------------

1、在网页输入 http://localhost:8080/function1?str=12345:

前端会显示:

后端会显示:

2、在网页输入 http://localhost:8080/function2?sex=男:

后端无显示,前端显示:

稍微解释一下代码流程:我们在浏览器输入链接,相当于前端向后端发送了http请求,后端根据不同的请求映射函数(代码内是function1和function2),执行对应的业务代码,然后将结果返回给前端。部署的时候将localhost换成局域网IP,内网其他电脑都可以成为前端。

---------------------------------2021.9.25更新-----------------------------------------

补充线程池的代码样例,包括无线大的线程池,固定大小的线程池,定时执行的线程!

import java.util.concurrent.*;

class ThreadPoolTest {
    public void cachedThreadPool() {
        ExecutorService threadPool = Executors.newCachedThreadPool();
        for(int i=0;i<10;i++) {
            threadPool.execute(()->{
                while(true){
                    System.out.println(Thread.currentThread().getId());
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    public void fixedThreadPool() {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        for(int i=0;i<10;i++) {
            int finalI = i;
            threadPool.execute(()->{
                int count = 5;
                while(true){
                    System.out.println(Thread.currentThread().getId() + ":" + finalI);
                    if(0 == --count) {
                        break;
                    }

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    public void scheduledThreadPool() {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        scheduledExecutorService.scheduleAtFixedRate(()->{
            System.out.println(Thread.currentThread().getId() + ":one second pass");
        }, 0, 1, TimeUnit.SECONDS);
    }
}


public class Main {
    public static void main(String[] args) {
        ThreadPoolTest threadPoolTest = new ThreadPoolTest();
        threadPoolTest.scheduledThreadPool();
    }
}

---------------------------------2021.10.2更新-----------------------------------------

补充http协议get和post的代码,用来与SpringBoot的controller模块通信

import net.sf.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class http_test {

    public JSONObject httpGet(){
        RestTemplate rt = new RestTemplate();
        String urlGet = "http://localhost:8886/Test/get";
        ResponseEntity<JSONObject> response = rt.getForEntity(urlGet, JSONObject.class);
        JSONObject body = response.getBody();
        return body;
    }

    public JSONObject httpPost() {
        JSONObject jobj = new JSONObject();
        jobj.element("name","caoyi").element("password","123");
        RestTemplate rt = new RestTemplate();
        String urlGet = "http://localhost:8886/Test/set";
        ResponseEntity<JSONObject> response = rt.postForEntity(urlGet, jobj, JSONObject.class);
        JSONObject body = response.getBody();
        return body;
    }
    
    public static void main(){

    }
}

猜你喜欢

转载自blog.csdn.net/XLcaoyi/article/details/120236304