综合实践:JPA+Thymeleaf 增删改查

news/2024/9/28 12:32:54/

在Java Web开发中,使用JPA(Java Persistence API)作为ORM(对象关系映射)框架和Thymeleaf作为模板引擎来实现增删改查(CRUD)操作是一种常见且高效的方式。以下是一个简单的示例,展示如何使用Spring Boot、JPA和Thymeleaf来实现一个基本的CRUD应用。

1. 搭建Spring Boot项目

首先,你需要创建一个Spring Boot项目。可以使用Spring Initializr(https://start.spring.io/)来快速生成项目结构。

  • 选择项目类型:Maven Project 或 Gradle Project
  • 语言:Java
  • Spring Boot版本:选择最新的稳定版本
  • 项目元数据:填写Group和Artifact名称
  • 依赖:Spring Web, Spring Data JPA, Thymeleaf, H2 Database(或你选择的数据库

2. 配置数据库

src/main/resources/application.propertiesapplication.yml中配置数据库连接。以下是一个使用H2数据库的示例:

spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driverClassName=org.h2.Driver  
spring.datasource.username=sa  
spring.datasource.password=password  
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect  
spring.h2.console.enabled=true

3. 创建实体类

假设我们要管理一个Person实体,创建一个Person.java类:

import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  @Entity  
public class Person {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id;  private String name;  private int age;  // 构造器、getter和setter省略  
}

4. 创建JPA仓库

创建一个PersonRepository.java接口来继承JpaRepository

import org.springframework.data.jpa.repository.JpaRepository;  public interface PersonRepository extends JpaRepository<Person, Long> {  
}

5. 创建服务层

创建一个PersonService.java类来处理业务逻辑:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  import java.util.List;  @Service  
public class PersonService {  @Autowired  private PersonRepository personRepository;  public List<Person> findAll() {  return personRepository.findAll();  }  // 添加、更新、删除方法省略  
}

6. 创建控制器

创建一个PersonController.java类来处理HTTP请求:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.ui.Model;  
import org.springframework.web.bind.annotation.*;  @Controller  
public class PersonController {  @Autowired  private PersonService personService;  @GetMapping("/")  public String listPersons(Model model) {  model.addAttribute("persons", personService.findAll());  return "persons";  }  // 添加、更新、删除方法的视图映射省略  
}

7. 创建Thymeleaf模板

src/main/resources/templates目录下创建persons.html模板文件:

<!DOCTYPE html>  
<html xmlns:th="http://www.thymeleaf.org">  
<head>  <title>Persons</title>  
</head>  
<body>  <h1>Persons</h1>  <table>  <thead>  <tr>  <th>ID</th>  <th>Name</th>  <th>Age</th>  </tr>  </thead>  <tbody>  <tr th:each="person : ${persons}">  <td th:text="${person.id}"></td>  <td th:text="${person.name}"></td>  <td th:text="${person.age}"></td>  </tr>  </tbody>  </table>  <!-- 添加表单、链接等用于CRUD操作 -->  
</body>  
</html>

8. 运行和测试

运行Spring Boot应用,并访问http://localhost:8080/来查看你的CRUD应用。

以上步骤提供了一个基本的框架,你可以根据具体需求添加表单、链接和逻辑来完善CRUD操作。


http://www.ppmy.cn/news/1531525.html

相关文章

容器编排工具Docker Compose

目录 一、Docker Compose概述 1、主要功能 2、工作原理 二、常用命令参数 1、服务管理 2、构建和重新构建服务 三、Docker Compose的yml文件 1、服务 2、网络 3、存储卷 四、容器编排实现haproxy和nginx负载均衡 一、Docker Compose概述 1、主要功能 定义服务&#xf…

OpenCV 进行图像分割

介绍 图像分割是将数字图像划分互不相交的区域的过程,它可以降低图像的复杂性,从而使分析图像变得更简单。 图像分割技术 阈值法 基于边缘的分割 基于区域的分割 基于聚类的分割 基于分水岭的方法 基于人工神经网络的分割 在这里,我们选择基于聚类的分割 与分类算法不同,…

Python 多进程解析:Multiprocessing 高效并行处理的奥秘

Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘 文章目录 Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘一 多进程1 导入进程标准模块2 定义调用函数3 创建和启动进程 二 存储进程结果 Queue三 threading & multiprocessing 对比1 …

Mbox物联网关:驱动工业数据汇聚与智能处理的核心引擎

在数字化转型的汹涌浪潮中&#xff0c;Mbox物联网关作为工业物联网领域的佼佼者&#xff0c;正引领着制造业向智能化、高效化方向迈进&#xff0c;深刻重塑着传统工业的生产生态与效率边界。作为连接物理世界与数字世界的智能桥梁&#xff0c;明达技术自主研发的Mbox物联网关在…

基于Java开发的(控制台)模拟的多用户多级目录的文件系统

多级文件系统 1 设计目的 为了加深对文件系统内部功能和实现过程的理解&#xff0c;设计一个模拟的多用户多级目录的文件系统&#xff0c;并实现具体的文件物理结构、目录结构以及较为完善的文件操作命令集。 2 设计内容 2.1系统操作 操作命令风格&#xff1a;本文件系统的…

维权成功!

阅读本文大概需要 1.26 分钟 周五了&#xff0c;简单聊几句。是这样的&#xff0c;前些天看后台私信的时候&#xff0c;发现有读者私信关键词「截图」「后台截图」之类的&#xff0c;我一下就知道是怎么回事了&#xff0c;估计也就我星球里的球友或者较早点的老读者能 get 到这…

基于 LangChain 的自动化测试用例的生成与执行

应用价值 通过人工智能代替人工操作的部分&#xff0c;节省时间&#xff0c;提升效率。通过封装更多的 Tools&#xff0c;让 Agent 更为智能。 实践演练 实现原理 实现思路 在理解需求之后&#xff0c;我们可以了解到我们需要让 Agent 具备两个功能&#xff1a; 输入源码信…

尚硅谷vue3+TypeScript笔记大全

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…