自学内容网 自学内容网

JPA+Thymeleaf增删改查

在使用JPA(Java Persistence API)和Thymeleaf作为模板引擎进行Web开发时,实现增删改查(CRUD)操作是一个常见的需求。下面,我将简要介绍如何使用Spring Boot框架结合JPA和Thymeleaf来实现这一功能。

1. 环境准备

首先,确保你的开发环境已经安装了Java和Maven(或Gradle),并且IDE(如IntelliJ IDEA, Eclipse等)已经配置好。

2. 创建Spring Boot项目

可以使用Spring Initializr(https://start.spring.io/)快速生成Spring Boot项目框架。在生成项目时,需要选择以下依赖:

  • Spring Web
  • Spring Data JPA
  • H2 Database(或MySQL, PostgreSQL等其他数据库)
  • Thymeleaf

3. 配置数据库

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

4. 创建实体类

例如,创建一个User实体类:

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

5. 创建JPA仓库

创建一个继承自JpaRepository的接口,用于数据访问:

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

6. 创建服务层

创建服务层来封装业务逻辑:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
  
import java.util.List;  
  
@Service  
public class UserService {  
  
    @Autowired  
    private UserRepository userRepository;  
  
    public List<User> findAll() {  
        return userRepository.findAll();  
    }  
  
    // 其他CRUD方法...  
}

7. 创建控制器

创建一个控制器来处理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 UserController {  
  
    @Autowired  
    private UserService userService;  
  
    @GetMapping("/")  
    public String listUsers(Model model) {  
        model.addAttribute("users", userService.findAll());  
        return "users";  
    }  
  
    // 其他CRUD操作对应的请求处理方法...  
}

8. 创建Thymeleaf模板

src/main/resources/templates目录下创建Thymeleaf模板文件,如users.html,用于展示用户列表和表单。

<!DOCTYPE html>  
<html xmlns:th="http://www.thymeleaf.org">  
<head>  
    <title>用户列表</title>  
</head>  
<body>  
    <h1>用户列表</h1>  
    <ul>  
        <li th:each="user : ${users}">  
            <span th:text="${user.name}">Name</span>  
            <span th:text="${user.email}">Email</span>  
        </li>  
    </ul>  
    <!-- 添加、编辑、删除等表单或链接 -->  
</body>  
</html>

9. 运行和测试

运行Spring Boot应用,并通过浏览器访问相应的URL(如http://localhost:8080/)来查看效果。

其他功能

拦截器

在Spring Boot应用中,拦截器(Interceptor)是一个非常有用的特性,它允许你在请求被控制器处理之前或之后,以及响应发送给客户端之前执行一些逻辑。这些逻辑可能包括日志记录、身份验证、权限检查、请求/响应数据的修改等。

以下是如何在Spring Boot应用中配置和使用拦截器的步骤:

1. 创建拦截器类

首先,你需要创建一个实现HandlerInterceptor接口的类。在这个类中,你可以重写preHandlepostHandleafterCompletion方法来在请求的不同阶段执行你的逻辑。

import org.springframework.stereotype.Component;  
import org.springframework.web.servlet.HandlerInterceptor;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
@Component  
public class MyInterceptor implements HandlerInterceptor {  
  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        // 在请求处理之前进行调用(Controller方法调用之前)  
        // 可以在这里进行权限检查、日志记录等  
        // 如果返回false,则中断后续操作,请求不会继续执行  
        // 如果返回true,则继续后续操作(如调用Controller方法)  
        System.out.println("Before request is processed");  
        return true;  
    }  
  
    @Override  
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  
        // 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)  
        // 可以用于修改模型数据,但不可以修改请求或响应本身  
        System.out.println("After request is processed, before view is rendered");  
    }  
  
    @Override  
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  
        // 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图执行后  
        // 主要用于进行资源清理工作  
        System.out.println("After everything is done, rendering view and forwarding");  
    }  
}

2. 配置拦截器

接下来,你需要在Spring MVC的配置中注册你的拦截器。这通常是通过实现WebMvcConfigurer接口来完成的。

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  
  
@Configuration  
public class WebConfig implements WebMvcConfigurer {  
  
    @Autowired  
    private MyInterceptor myInterceptor;  
  
    @Override  
    public void addInterceptors(InterceptorRegistry registry) {  
        // 添加拦截器,并指定拦截的路径和排除的路径  
        registry.addInterceptor(myInterceptor)  
                .addPathPatterns("/**") // 拦截所有请求  
                .excludePathPatterns("/static/**", "/error"); // 排除/static/下的资源和/error路径  
    }  
}

3. 测试拦截器

现在,当你启动Spring Boot应用并发送HTTP请求时,你的拦截器将在请求处理的不同阶段被调用。你可以通过查看控制台输出来验证拦截器是否按预期工作。


原文地址:https://blog.csdn.net/y050505/article/details/142517734

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!