SpringBoot Web API 接口——GET请求

一名大佬和我说,作为一名大数据工程师,必备的技能,一是SQL,二是对外提供数据接口。所以现在开始学习简单的SpringBoot+MySQL实现GET请求从数据库中查询数据。

数据库准备

默认MySQL数据库已经准备好

create database springbootdb;

CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) DEFAULT NULL,
  `age` int(10) DEFAULT NULL,
  `email` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;


INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jone', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jack', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Tom', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jone', 18, 'test1@baomidou.com');

建表以及插入数据成功以后,查询如下图所示:


image.jpeg

SpringBoot项目

首先创建一个maven项目,选择Spring Initializr是因为可以减少自己手动添加的依赖。
image.png

点击下一步以后,注意使用的Java版本。
image.png

选择添加的依赖。
image.png

需要手动添加的依赖。

<!--内置tomcat对Jsp支持的依赖,用于编译Jsp-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<!--引入jsp相关-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
</dependency>
<!--引入Servlet-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
<!--引入jstl-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

由于使用的模版构建的项目,所以会自动创建一些文件目录,例如启动类。
image.png

依次创建pojo->mapper->contrpller目录。
image.png
一般写的顺序:pojo->Mapper/Dao->Controller->Service
Entity/pojo:实体层,数据库在项目中的类
Dao/Mapper:持久层,主要与数据库交互(接口,需要写实现类)
Service:业务层,控制业务(接口,需要写实现类)
Controller:控制层,控制业务逻辑

最后的结构如下:
image.png

不要忘记填写配置文件

application.properties

# 应用名称
spring.application.name=demo
# 应用服务 WEB 访问端口
server.port=8080
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456

User.java

package com.example.demo.pojo;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;

    public User() {
    }

    public User(Integer id, String name, Integer age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}

也可以使用lombok注解(lombok插件需要自己安装一下,并且由于我们在创建项目选择依赖时,已经选择了lombok,所以在pom文件中已经有lombok的依赖,如果pom文件中没有lombok的依赖,需要手动添加)

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

使用lombok注解的User类

package com.example.demo.pojo;

import lombok.Generated;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Generated
@Getter
@Setter
@ToString
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;    
}

UserMapper.java

package com.example.demo.mapper;

import com.example.demo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
//@Mapper : MyBatis 映射器的标记接口
@Mapper
public interface UserMapper {
    //@Select : 可以执行SQL
    @Select("select * from user")
    List<User> findAll();
}

UserController.java

package com.example.demo.controller;

import com.alibaba.fastjson.JSON;
import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
//返回Rest风格的json,类注释
//
@RestController
public class UserController {
    //@Autowired注解自动注入Mapper
    @Autowired
    UserMapper userMapper;
    //JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。
   //JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。
    @Autowired
    JdbcTemplate jdbcTemplate;
    
    //请求一:访问http://localhost:8080/user接口,查询表中所有数据
    //@RequestMapping:映射请求,也就是通过它来指定控制器可以处理哪些URL请求
    @RequestMapping(value = "/user")
    public List<User> hello(){
        List<User> users = userMapper.findAll();
        return users;
    }
    //请求二:访问http://localhost:8080/userinfo?id=2接口,返回传入参数
    @RequestMapping(value = "/userinfo", method = RequestMethod.GET)
    public String findUser(HttpServletRequest request, HttpServletResponse response){
        String id = request.getParameter("id");
        return id;
    }
    //请求三:访问http://localhost:8080/userinfo?id=2接口,返回指定数据库数据,不手动封装json
    @RequestMapping(value = "/id", method = RequestMethod.GET)
    public List findUserWithId(HttpServletRequest request, HttpServletResponse response){
        List<Map<String, Object>> tmpList = jdbcTemplate.queryForList("select * from user where id>=" + request.getParameter("id"));
        return tmpList;
    }
    ////请求三:访问http://localhost:8080/userinfo?id=2接口,返回指定数据库数据,手动封装json
    @RequestMapping(value = "/eq", method = RequestMethod.GET)
    public String findUserWithId2(HttpServletRequest request, HttpServletResponse response){
        List<Map<String, Object>> tmpList = jdbcTemplate.queryForList("select * from user where id=" + request.getParameter("id"));
    return JSON.toJSON(tmpList).toString();
    }
}

请求一测试结果:
image.png

请求二测试结果:
image.png

请求三测试结果:
image.png

请求四测试结果:
image.png

总结:

一般写的顺序:pojo->Mapper/Dao->Controller->Service
pojo/entity:
    编写实体类,每一个参数是需要private定义
    需要无参构造类型、全参构造类型、相应的get/set方法、实现toString方法
dao/mapper:
    需要使用@Mapper注解
    定义的是接口,不是方法
    使用@Select("SQL")注解,进行数据库操作
Service:
Controller:
    @Controller是返回页面,return '页面的标识'
    @RestController返回Rest风格的json串 
    使用@AutoWired注解自动注入Mapper
    JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用,可以进行数据库操作。
其他注意:如果查询数据库,那么pojo类需要和数据库中的字段一样,否则会查不到数

至此,一个简单的SpringBoot WebAPI 的GET请求完成。

参考:
https://blog.csdn.net/qq_28202661/article/details/79946176
https://blog.csdn.net/p812438109/article/details/106629526
https://blog.csdn.net/p812438109/article/details/106629526

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容