Skip to content

创建项目

  1. File — New — Project

  2. 选择 Spring Initializr

  3. 选择安装依赖

修改配置文件

修改 src/main/resources/application.properties 文件,注意修改库名

properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/BookSystem?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

创建包

  1. controller:控制器,处理接口请求

  2. pojo:实体类,表对象

  3. mapper:映射器,每张数据表对应的接口

  4. config:配置文件包

  5. sql:SQL 脚本

  6. utils:工具类

注解符

java
@RequestMapping("/test"); 	// 接受任何类型请求
@GetMapping("/test");       // 处理 Get 请求
@PostMapping("/test");      // 处理 Post 请求
@PutMapping("/test");       // 处理 Put 请求
@DeleteMapping("/test");    // 处理 Delete 请求

处理接口请求类

  1. 在 controller 包中创建的类都称为处理接口请求类,每个数据库对应一个类。

  2. 创建一个 User 表的 controller

    java
    package com.springboot.controller;
    
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
      
        @RequestMapping("/test")
        public String test(String name) {
            return name;
        }
      
    }
  3. 接下来我们把这个接口细化一下

    java
    package com.springboot.controller;
    
    import org.springframework.web.bind.annotation.*;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/test")
        public Map<String, Object> test(String name) {
            int code = 200;
            String msg = "success";
            Map<String, Object> map = new HashMap<>();
    
            if (name == null) {
                code = 501;
                msg = "name 参数不能为空";
            } else {
                map.put("data",name);
            }
    
            map.put("code",code);
            map.put("msg",msg);
    
            return map;
        }
    
    }

实体类

  1. 每给数据表对应一个实体类。

  2. 创建 User 表对应的实体类

    java
    package com.springboot.pojo;
    
    public class User {
        private int id;
        private String account;
        private String password;
        private String nickname;
        private int age;
    
        public User(){}
    
        public User(String account, String password, String nickname, int age) {
            this.account = account;
            this.password = password;
            this.nickname = nickname;
            this.age = age;
        }
    
        public User(int id, String account, String password, String nickname, int age) {
            this.id = id;
            this.account = account;
            this.password = password;
            this.nickname = nickname;
            this.age = age;
        }
    
        public int getId() { return id; }
    
        public void setId(int id) { this.id = id; }
    
        public String getAccount() { return account; }
    
        public void setAccount(String account) { this.account = account; }
    
        public String getPassword() { return password; }
    
        public void setPassword(String password) { this.password = password; }
    
        public String getNickname() { return nickname; }
    
        public void setNickname(String nickname) { this.nickname = nickname; }
    
        public int getAge() { return age; }
    
        public void setAge(int age) { this.age = age; }
    }

映射器

  1. 主要用于规范每个数据表对应的接口,简单说就是增删改查操作。

  2. 创建 User 表的映射器

    java
    package com.springboot.mapper;
    
    import org.apache.ibatis.annotations.Mapper;
    import com.springboot.pojo.User;
    import org.apache.ibatis.annotations.Select;
    
    @Mapper
    public interface UserMapper {
    
        @Select("select * from user where id=#{id}")
        User getById(Integer id);
    
    }

查询一条数据

  1. 通过用户 ID 查询该用户信息。

  2. UserController.java 部分代码

    java
    @RequestMapping("/getUserInfo")
    public Map<String, Object> getUserInfo(Integer id) {
        int code = 200;
        String msg = "success";
        Map<String, Object> map = new HashMap<>();
    
        if (id == null) {
            code = 501;
            msg = "id 参数不能为空";
        } else {
            User user = um.getById(id);
            if (user == null) {
                code = 502;
                msg = "ID 不存在";
            } else {
                map.put("data",user);
            }
        }
    
        map.put("code",code);
        map.put("msg",msg);
    
        return map;
    }

插入数据

  1. 模拟注册功能。

  2. UserMapper.java 部分代码

    java
    @Mapper
    public interface UserMapper {
    
        @Select("select * from user where id=#{id}")
        User getById(Integer id);
    
        @Select("select * from user where account=#{account}")
        User getByAccount(String account);
    
        @Insert("insert into user(account,password,nickname,age) values(#{account},#{password},#{nickname},#{age})")
        Integer insert(User user);
    
    }
  3. UserController.java 部分代码。

    java
    @RequestMapping("/register")
    public Map<String, Object> register(String account,String password,String nickname,int age) {
        int code = 200;
        String msg = "success";
        Map<String, Object> map = new HashMap<>();
    
        User user = um.getByAccount(account);
        if (user == null) {
            um.insert(new User(account,password,nickname,age));
        } else {
            code = 501;
            msg = "用户已存在";
        }
        map.put("code",code);
        map.put("msg",msg);
    
        return map;
    }

删除数据

  1. UserMapper.java 部分代码

    java
    @Select("select * from user where id=#{id}")
    User getById(Integer id);
    
    @Delete("delete from user where id=#{id}")
    Integer cancellation(Integer id);
  2. UserController.java 部分代码

    java
    @RequestMapping("/cancellation")
    public Map<String, Object> cancellation(Integer id) {
        int code = 200;
        String msg = "注销成功";
        Map<String, Object> map  = new HashMap<>();
    
        User user = um.getById(id);
        if (user == null) {
            code = 502;
            msg = "用户不存在";
        } else {
            um.cancellation(id);
        }
    
        map.put("code",code);
        map.put("msg",msg);
    
        return map;
    }

修改数据

  1. UserMapper.java 部分代码

    java
    @Select("select * from user where id=#{id}")
    User getById(Integer id);
    
    @Update("update user set nickname = #{nickname} where id = #{id}")
    Integer updataNickname(Integer id,String nickname);
  2. UserController.java 部分代码

    java
    @RequestMapping("/editNickname")
    public Map<String, Object> updata(Integer id,String nickname) {
        int code = 200;
        String msg = "修改成功";
        Map<String, Object> map = new HashMap<>();
    
        User user = um.getById(id);
        if (user == null) {
            code = 501;
            msg = "用户不存在";
        } else {
            um.updataNickname(id,nickname);
        }
        map.put("code",code);
        map.put("msg",msg);
    
        return map;
    }

查询所有数据

  1. UserMapper.java 部分代码

    java
    @Select("select * from user")
    List<User> getUsers();
  2. UserController.java 部分代码

    java
    @RequestMapping("/getUsers")
    public Map<String, Object> getUsers() {
        Map<String, Object> map = new HashMap<>();
    
        map.put("code",200);
        map.put("msg","成功");
        map.put("data",um.getUsers());
        return map;
    }

解决跨域问题·1

  1. 在 config 包中创建 Cros 配置文件,这里小编命名为 WebMvcConfig.java

  2. 代码:

    java
    package com.springboot.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.CorsRegistry;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    @EnableWebMvc
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("http://localhost:8080")
                    .allowedHeaders("*")
                    .allowedMethods("*")
                    .maxAge(30 * 1000);
        }
    }
  3. addMapping:配置可以被跨域的路径,可以任意配置

  4. allowedOrigins:* 代表允许所有的请求域名访问我们的跨域资源

  5. allowCredentials:响应头表示是否可以将请求的响应暴露给页面

  6. allowedMethods:允许所有的请求header访问,可以自定义设置任意请求头信息

  7. maxAge:配置客户端缓存预检请求的响应时间(单位为秒)

解决跨域问题·2

java
package com.api.config;

import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(filterName = "CorsFilter")
@Configuration
public class WebMvcConfig implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin","*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        chain.doFilter(req, res);
    }
}

基于 MIT 许可发布