返回

Spring Web项目点亮数据库的旅程

后端

在上一篇文章中,我们已经完成了Spring的基础配置,今天,我们将重点关注如何利用Spring来访问数据库,实现对数据的操作,从而在Web页面上展现和管理数据。我们将使用MySQL作为我们的数据库,并逐步构建一个简单的CRUD(创建、读取、更新、删除)应用。

1. 准备工作

首先,我们需要在数据库中创建一个名为“student”的表,表中包含三个字段:“id”、“name”和“age”。

CREATE TABLE student (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  age INT NOT NULL,
  PRIMARY KEY (id)
);

接下来,我们需要在Spring项目中添加必要的依赖。在pom.xml文件中,添加以下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

2. 实体类

我们需要创建一个实体类来映射到数据库中的“student”表。实体类是一个Java类,它包含与数据库表中的列对应的属性。在我们的例子中,实体类名为“Student”,代码如下:

@Entity
@Table(name = "student")
public class Student {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @Column(name = "name")
  private String name;

  @Column(name = "age")
  private Integer age;

  // 省略getter和setter方法
}

3. DAO层

DAO层(数据访问对象层)负责与数据库进行交互,它包含对数据库的操作方法。在我们的例子中,DAO接口名为“StudentDAO”,代码如下:

public interface StudentDAO {

  List<Student> findAll();

  Student findById(Integer id);

  void save(Student student);

  void update(Student student);

  void delete(Integer id);
}

DAO接口的实现类名为“StudentDAOImpl”,代码如下:

@Repository
public class StudentDAOImpl implements StudentDAO {

  @PersistenceContext
  private EntityManager entityManager;

  @Override
  public List<Student> findAll() {
    return entityManager.createQuery("SELECT s FROM Student s", Student.class).getResultList();
  }

  @Override
  public Student findById(Integer id) {
    return entityManager.find(Student.class, id);
  }

  @Override
  public void save(Student student) {
    entityManager.persist(student);
  }

  @Override
  public void update(Student student) {
    entityManager.merge(student);
  }

  @Override
  public void delete(Integer id) {
    Student student = entityManager.find(Student.class, id);
    entityManager.remove(student);
  }
}

4. Service层

Service层负责处理业务逻辑,它调用DAO层的方法来访问数据库。在我们的例子中,Service接口名为“StudentService”,代码如下:

public interface StudentService {

  List<Student> findAll();

  Student findById(Integer id);

  void save(Student student);

  void update(Student student);

  void delete(Integer id);
}

Service接口的实现类名为“StudentServiceImpl”,代码如下:

@Service
public class StudentServiceImpl implements StudentService {

  @Autowired
  private StudentDAO studentDAO;

  @Override
  public List<Student> findAll() {
    return studentDAO.findAll();
  }

  @Override
  public Student findById(Integer id) {
    return studentDAO.findById(id);
  }

  @Override
  public void save(Student student) {
    studentDAO.save(student);
  }

  @Override
  public void update(Student student) {
    studentDAO.update(student);
  }

  @Override
  public void delete(Integer id) {
    studentDAO.delete(id);
  }
}

5. Controller层

Controller层负责处理HTTP请求,并调用Service层的方法来处理业务逻辑。在我们的例子中,Controller类名为“StudentController”,代码如下:

@RestController
@RequestMapping("/student")
public class StudentController {

  @Autowired
  private StudentService studentService;

  @GetMapping("/all")
  public List<Student> findAll() {
    return studentService.findAll();
  }

  @GetMapping("/{id}")
  public Student findById(@PathVariable Integer id) {
    return studentService.findById(id);
  }

  @PostMapping
  public void save(@RequestBody Student student) {
    studentService.save(student);
  }

  @PutMapping
  public void update(@RequestBody Student student) {
    studentService.update(student);
  }

  @DeleteMapping("/{id}")
  public void delete(@PathVariable Integer id) {
    studentService.delete(id);
  }
}

6. 测试

现在,我们可以启动Spring Boot项目,并在浏览器中访问“/student/all”URL,即可看到所有学生的数据。我们也可以在浏览器中访问“/student/1”URL,即可看到id为1的学生的数据。

至此,我们已经成功地实现了Spring Web项目对数据库的访问和操作。这只是Spring的强大功能的一个示例,你可以利用Spring来构建更复杂和功能强大的Web应用程序。