美文网首页
SpringBoot Web API 接口——GET请求

SpringBoot Web API 接口——GET请求

作者: 僕名前 | 来源:发表于2021-12-09 10:25 被阅读0次

    一名大佬和我说,作为一名大数据工程师,必备的技能,一是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

    相关文章

      网友评论

          本文标题:SpringBoot Web API 接口——GET请求

          本文链接:https://www.haomeiwen.com/subject/amfffrtx.html