搜索文档
创建项目
File — New — Project
选择 Spring Initializr

选择安装依赖

修改配置文件
修改 src/main/resources/application.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创建包
controller:控制器,处理接口请求
pojo:实体类,表对象
mapper:映射器,每张数据表对应的接口
config:配置文件包
sql:SQL 脚本
utils:工具类

注解符
@RequestMapping("/test"); // 接受任何类型请求
@GetMapping("/test"); // 处理 Get 请求
@PostMapping("/test"); // 处理 Post 请求
@PutMapping("/test"); // 处理 Put 请求
@DeleteMapping("/test"); // 处理 Delete 请求处理接口请求类
在 controller 包中创建的类都称为处理接口请求类,每个数据库对应一个类。
创建一个 User 表的 controller
javapackage com.springboot.controller; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/test") public String test(String name) { return name; } }
接下来我们把这个接口细化一下
javapackage 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; } }

实体类
每给数据表对应一个实体类。
创建 User 表对应的实体类
javapackage 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; } }
映射器
主要用于规范每个数据表对应的接口,简单说就是增删改查操作。
创建 User 表的映射器
javapackage 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); }
查询一条数据
通过用户 ID 查询该用户信息。
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; }


插入数据
模拟注册功能。
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); }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; }

删除数据
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);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; }
修改数据
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);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; }
查询所有数据
UserMapper.java 部分代码
java@Select("select * from user") List<User> getUsers();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
在 config 包中创建 Cros 配置文件,这里小编命名为 WebMvcConfig.java
代码:
javapackage 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); } }addMapping:配置可以被跨域的路径,可以任意配置
allowedOrigins:* 代表允许所有的请求域名访问我们的跨域资源
allowCredentials:响应头表示是否可以将请求的响应暴露给页面
allowedMethods:允许所有的请求header访问,可以自定义设置任意请求头信息
maxAge:配置客户端缓存预检请求的响应时间(单位为秒)
解决跨域问题·2
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);
}
}