Spring Web项目点亮数据库的旅程
2023-09-13 01:20:37
在上一篇文章中,我们已经完成了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应用程序。