添加依赖

  • 添加依赖到porm.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    </dependency>
    <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
    </dependency>

    创建数据库

创建数据表

  • 使用数据库实体创建数据表
  • 添加信息到application.properties
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 这里是项目的配置文件
    # 设置项目运行的端口:

    server.port=8080

    # 这里是数据库连接驱动的设置,设置了一些连接参数来使连接有效。
    # 数据库的连接驱动
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    # 连接数据库的地址,数据库的端口默认情况下是3306端口,请根据自己的情况修改
    # 地址:端口/数据表名
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/user?serverTimezone=UTC&useSSL=false
    # 连接的账号和密码,也要根据自己情况去修改。
    spring.datasource.username=root
    spring.datasource.password=root

    # 这里配置的是hibernate 框架的信息,数据库的访问使用了 hibernate 框架。
    # 这里是数据库的连接类型信息,选择的是mysql 数据库。
    spring.jpa.database=mysql
    # 这里的参数有五种,常用的就是 create 和 update ,区别在于create 在每一次启动应用的时候都会重新创建数据库,并把之前的数据全部删掉,而update 则是采用增量的方式来进行创建,只更新修改的了部分,保留未修改部分的数据
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true

    创建学生Bean

  • 作为数据表的映射
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package com.example.demo;

    import javax.validation.constraints.NotNull;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;

    @Entity
    public class StudentForm {
    @Id
    @GeneratedValue
    private Integer id;
    @NotNull
    private String account;
    private String password;
    private String name;
    private Integer age;
    /// 省略set、get、toString
    }
  • 运行程序,自动创建数据表

添加数据库接口

1
2
3
4
5
6
7
package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface DBUtils extends JpaRepository<StudentForm, Integer> {
StudentForm findByAccount(String account);
}

编写业务逻辑

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.example.demo;

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Optional;

@RestController
public class StudentController {
private final DBUtils dbUtils;

public StudentController(DBUtils dbUtils) {
this.dbUtils = dbUtils;
}

@GetMapping("/students")
public List getStudentForms() {
return dbUtils.findAll();
}

@GetMapping("/students/{account}")
public Object getStudentFormById(@PathVariable("account") String account) {
StudentForm student = dbUtils.findByAccount(account);
if (student != null)
return student;
else
return "查找失败:当前学号的学生没有!";
}

@PostMapping("/students/add")
public Object addStudentForm(@Valid StudentForm studentForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return "不符合条件,插入失败,请检查是不是有正确的请求参数";
}
dbUtils.save(studentForm);
return studentForm;
}

@PostMapping("/students/update")
public Object updateStudentFormById(@RequestParam("id") Integer id,
@RequestParam(value = "age", required = false, defaultValue = "-1") Integer age,
@RequestParam(value = "name", required = false, defaultValue = "null") String name,
@RequestParam(value = "password", required = false, defaultValue = "null") String password,
@RequestParam(value = "account", required = false, defaultValue = "null") String account) {
Optional studentC = dbUtils.findById(id);
if (studentC.isPresent()) {
StudentForm student = (StudentForm) studentC.get();
if (age != -1) {
student.setAge(age);
}
if (!name.equals("null")) {
student.setName(name);
}
if (!account.equals("null")) {
student.setAccount(account);
}
if (!password.equals("null")) {
student.setPassword(password);
}
dbUtils.save(student);
return student;
}
return "修改失败,没有找到学生信息!";
}

@PostMapping("/students/delete")
public String deleteById(@RequestParam(value = "id") Integer id) {
Optional studentC = dbUtils.findById(id);
if (studentC.isPresent()) {
StudentForm student = (StudentForm) studentC.get();
dbUtils.deleteById(id);
return "{'msg':'删除成功','object':'" + student.toString() + "'}";
}
return "没有办法删除:找不到要删除的信息!";
}
}

注解

  • @Entity

    一个数据库实体注解,有这个注解的类代表和数据库中的某一个表相对应,这个类中的所有属性就是数据表中的所有字段,都是一一对应的,此外这个注解经常和@Table(name=“数据表名称”) 来一起使用,如果数据表名称和这个类的名称一致的话,那就可以省略@Table(name=“数据表名称”) 的注解

  • @Id

    表示该属性为主键,数据表的主键就是可以唯一标识数据表中一行书库的一个属性组。

  • @GeneratedValue

    表示该属性是一个自增属性,在插入的时候自动怎家,通常是 Integer 类型

  • @NotNull

    表示这个属性不可以为空,这是数据库字段的约束,此外还有很多约束

  • @RestController

    @RestController 是一个结合了 @ResponseBody 和 @Controller 的注解,@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

  • @Autowired

    注解在类上,表示这是一个控制层bean

  • @GetMapping

    GetMapping(value=“url地址”) 指定url 地址,添加一个get请求方法,这样就可以用注解的方法来实现get请求的监听了

  • @PostMapping

    和GetMapping 类似,就是监听的是一个Post 请求

  • @RequestParam

    请求的参数,从前端传过来的参数,可以通过这个来获取

  • @PathVariable

    类似于RequestParam,只不过请求的URL稍有不同,可以看例子使用

  • @Valid

    这是一个校验的注解,在数据库实体类上定义的约束会会进行校验,不合格会返回一定的提示信息,保证数据库的完整性。