(如果没有了解可以去我主页看看 第一至六章的内容来学习)我们已经对Spring Boot相关知识点进行了系统学习,包括项目构建、数据访问层、表示层等。考虑到相关技术点的使用热度,及技术点学完之后的练习目的,这章节我们来进行使用JPA+Thymeleaf完成用户的登录及完整的增删改查操作,并将拦截器,Ajax等技术点整合进来,为后面学习Shiro框架打好基础,做好前期准备工作。
7.1 模型开发
模型包括entity、repository、service。
7.1.1entity
在Java Web开发中,结合JPA(Java Persistence API)用于数据库操作与Thymeleaf作为模板引擎来渲染HTML页面是一种常见且强大的组合。下面我将为你提供一个简单的示例,展示如何定义一个JPA实体类,并使用Spring Boot框架结合Thymeleaf来显示这些实体数据。
1. JPA 实体类定义
首先,我们需要定义一个JPA实体类。假设我们正在处理一个简单的User实体,包含id、name和email属性。
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省略
public User() {
}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// getter 和 setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2. Repository 接口
在Spring Data JPA中,你可以通过定义一个继承自JpaRepository或CrudRepository的接口来自动实现CRUD操作。
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
3. Controller 类
然后,我们需要一个Controller来处理HTTP请求,并使用Thymeleaf来渲染页面。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/")
public String index(Model model) {
List<User> users = userRepository.findAll();
model.addAttribute("users", users);
return "users"; // 返回的Thymeleaf模板名
}
}
4. Thymeleaf 模板
最后,你需要一个Thymeleaf模板来显示用户数据。在src/main/resources/templates目录下创建一个名为users.html的文件。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Users</title>
</head>
<body>
<h1>Users</h1>
<ul>
<li th:each="user : ${users}">
<span th:text="${user.name}">Name</span> -
<span th:text