前后端分离之Springboot

使用Springboot进行后端搭建的记录

环境配置

  • jdk 1.8
  • mysql 5.7+
  • node 16.19.0
  • navicat
  • IDEA2021.3

使用Springboot进行后端搭建

项目依赖

  • Lombok
  • Spring Web
  • MySQL Driver
  • MyBatis Framework

此处默认已安装MySQL和Navicat

项目结构

  • src
  • pom.xml

使用idea的springboot框架自动创建项目后,得到如下项目结构

其中src是主程序文件夹,pom.xml是依赖的配置文件,包含了依赖的版本等信息。

配置数据库

数据库配置文件在/src/main/resources目录下的application.yml文件,需要先对它进行配置

我的测试用数据库配置如下,其中数据库连接地址中test字段为用户数据库的名字,需根据实际情况修改,serverTimezone也应根据所在地自行更改时区(GMT%2b8为东八区)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 应用名称
spring:
# application:
# name: Springboot
# 数据库驱动:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据源名称
name: defaultDataSource
# 数据库连接地址
url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8
# 数据库用户名&密码:
username: ****
password: ******
# 应用服务 WEB 访问端口
server:
port: 9090
mybatis:
mapper-locations: classpath:mapper/*.xml #扫描所有mybatis文件

首先在springboot文件目录下创建entity层(也叫model层、domain层)用于存放我们的实体类,与数据库中的属性基本保持一致,实现set和get的方法(此处使用的@Data注解包含了set和get方法,故没有在下面体现)

在entity包下创建实体类与之前创建的数据库的结构对应,如下图所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.marcaas.springboot.entity;

import lombok.Data;

@Data
public class User {
private Integer id;
private String username;
private String password;
private String nickname;
private String email;
private String phone;
private String address;

}

这里使用了lombok插件的@Data注解来代替繁琐的对每个变量的get和set方法,更加简洁

在springboot文件夹下创建mapper层(也叫dao层),对数据库进行数据持久化操作,方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与xxx.xml内相互一一映射

在mapper层创建Interface接口类UserMapper

并对其进行编辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.marcaas.springboot.mapper;

import com.marcaas.springboot.entity.User;
import org.apache.ibatis.annotations.*;

import javax.jws.soap.SOAPBinding;
import java.util.List;

@Mapper
public interface UserMapper {
@Select("SELECT * from sys_user")
List<User> findAll();

@Select("INSERT into sys_user(username,password,nickname,email,phone,address) " +
"VALUES(#{username},#{password},#{nickname},#{email},#{phone},#{address})")
Integer insert(User user);

Integer update(User user);

@Delete("delete from sys_user where id = #{id}")
Integer deleteById(@Param("id") Integer id);

@Select("select * from sys_user limit #{pageNum}, #{pageSize}")
List<User> selectPage(Integer pageNum, Integer pageSize);

@Select("select count(*) from sys_user")
Integer selectTotal();
}

此处的注解Select是Mybatis提供的

创建controller层(也叫web层),负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller通过接受前端H5或App传来的参数进行业务操作,再将处理结果返回到前端。

在controller层下创建UserController.java文件,并编辑新增接口和查询接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.marcaas.springboot.controller;

import com.marcaas.springboot.entity.User;
import com.marcaas.springboot.mapper.UserMapper;
import com.marcaas.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserMapper userMapper;

@Autowired
private UserService userService;

// 新增或更新接口
@PostMapping
public Integer save(@RequestBody User user) {
return userService.save(user);
}

// 查询所有数据
@GetMapping
public List<User> index() {
return userMapper.findAll();
}

// 按id删除数据
@DeleteMapping("/{id}")
public Integer delete(@PathVariable Integer id) {
return userMapper.deleteById(id);
}

// 分页查询
// 接口路径:/user/page?pageNum=1&pageSize=10
// @RequestParam接受
@GetMapping("/page")
public Map<String, Object> findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize) {
pageNum = (pageNum - 1) * pageSize;
List<User> data = userMapper.selectPage(pageNum, pageSize);
Integer total = userMapper.selectTotal();
Map<String, Object> res = new HashMap<>();
res.put("data", data);
res.put("total", total);
return res;
}

}

实现增删改查