渲染数据库数据到网页(MySQL+java+html)
环境部分
一.按照图片顺序创建项目
1.打开IDEL新建项目

2.选择项目

3.添加依赖





4.运行



5.连接数据库





6.至此,该部分完成
代码部分
一.创建项目框架
1. 项目结构
这个项目配置适用于一个使用 Spring Boot 的 Web 应用,可能包括后端 REST API 和前端页面渲染。使用 MySQL 作为数据库,Thymeleaf 作为模板引擎。
2. 配置文件解析
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
modelVersion:指定 POM 的版本。通常使用4.0.0。xmlns和xsi:schemaLocation:定义了 XML 的命名空间和 XML Schema 用于验证的模式。
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
groupId:项目的组织 ID,通常是域名倒写。artifactId:项目的名称或标识符。version:项目的版本。1.0-SNAPSHOT是一个开发版本。
3. 父级 Spring Boot 配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
- 父 POM:这里使用了 Spring Boot 提供的父 POM
spring-boot-starter-parent,它简化了很多配置,并自动包含常用的依赖和插件。
4. 项目依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>
spring-boot-starter-web:提供 Spring Web 功能,包括嵌入式 Tomcat 容器、RESTful API 支持等。spring-boot-starter-data-jpa:用于 Spring Data JPA,使你能够轻松地与关系数据库进行交互。mysql-connector-java:MySQL 数据库的 JDBC 驱动。spring-boot-starter-thymeleaf:提供Thymeleaf模板引擎支持,用于构建动态网页。gson:用于 JSON 数据的解析和生成,通常用于与外部系统交互。
5.完整代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>
</project>
二.配置数据库连接
1. 配置数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/wdemo?useSSL=false&serverTimezone=UTC
jdbc:mysql://localhost:3306/wdemojdbc:mysql://:使用MySQL的JDBC驱动协议。localhost:3306:数据库服务器地址和端口(3306是MySQL默认端口)。wdemo:数据库名称。
useSSL=false- 禁用SSL连接,避免因为SSL配置不当导致连接失败。
serverTimezone=UTC- 设置服务器时区为UTC,避免时区问题。
2. 配置数据库账户
spring.datasource.username=root
spring.datasource.password=123456
-
spring.datasource.username:数据库的用户名(root)。 -
spring.datasource.password:数据库的密码(123456)。 -
安全建议
:
- 不要在
application.properties中暴露明文密码,建议使用Spring Boot的加密工具或环境变量存储密码。
- 不要在
3. 配置JDBC驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
com.mysql.cj.jdbc.Driver:MySQL 8 及以上的官方JDBC驱动类。
4. 配置 JPA (Hibernate)
spring.jpa.hibernate.ddl-auto=update
-
hibernate.ddl-auto定义数据库表的管理方式:
create:每次启动都会删除并重新创建表(开发时可用,生产环境慎用)。create-drop:应用关闭时删除表(适用于测试)。update:自动更新表结构(推荐用于开发环境)。validate:只校验表结构,不会自动修改数据库。none:不进行DDL操作(推荐用于生产环境)。
5. 显示SQL语句
spring.jpa.show-sql=true
true:在控制台输出Hibernate执行的SQL语句,方便调试。false(默认):不显示SQL。
6.完整代码
# MySQL 数据库配置
# 数据库连接URL
# 格式: jdbc:mysql://<host>:<port>/<database>?<parameters>
spring.datasource.url=jdbc:mysql://localhost:3306/wdemo?useSSL=false&serverTimezone=UTC
# useSSL=false: 禁用SSL连接
# serverTimezone=UTC: 设置服务器时区为UTC
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=123456
# JDBC驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA 配置
# hibernate.ddl-auto 可选值: create, create-drop, update, validate, none
# update: 自动更新数据库结构
spring.jpa.hibernate.ddl-auto=update
# 是否显示SQL语句
# true: 显示执行的SQL语句
spring.jpa.show-sql=true
三.创建数据库表
1. 关键字解析
CREATE TABLE IF NOT EXISTS
CREATE TABLE:表示创建一个新的表。IF NOT EXISTS:- 只有当数据库中不存在该表时,才执行创建操作。
- 避免重复执行
CREATE TABLE导致的错误。
id INT PRIMARY KEY AUTO_INCREMENT
id:列的名称,表示用户的唯一标识符(主键)。INT:数据类型,整数类型(通常用于ID字段)。PRIMARY KEY:- 指定该字段为主键(Primary Key)。
- 主键值必须唯一,不能为NULL。
AUTO_INCREMENT:- 让数据库自动递增该字段的值。
- 插入数据时,无需手动指定
id,MySQL会自动赋值。
name VARCHAR(50) NOT NULL
name:列的名称,表示用户的姓名。VARCHAR(50):- 变长字符串,最大长度为50个字符。
- 使用
VARCHAR而不是CHAR,避免浪费存储空间。
NOT NULL:- 该字段不能为空,插入数据时必须提供值。
email VARCHAR(100) NOT NULL
email:列的名称,表示用户的邮箱。VARCHAR(100):- 变长字符串,最大长度为100个字符。
- 选择足够的长度存储常见的电子邮件地址。
NOT NULL:- 电子邮件不能为空,插入数据时必须提供值。
age INT
age:列的名称,表示用户的年龄。INT:整数类型。- 默认可以为空(未指定
NOT NULL),意味着可以插入NULL值。
2.完整代码
CREATE TABLE if not exists user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
age INT
);
四.创建实体类
1. @Entity:标记为JPA实体
@Entity
- 作用:标记该类为 JPA 实体类,表明它对应数据库中的一张表。
- 要求:
- 必须有一个主键(
@Id)。 - 必须有一个无参构造函数(默认生成)。
- 必须有一个主键(
2. @Table(name = "user"):指定数据库表名
@Table(name = "user")
- 作用:显式指定数据库中的表名为
"user"。 - 必要性:
- 若不加
@Table,JPA 默认使用类名作为表名(区分大小写)。 user是 SQL 关键字,建议使用反引号 (user) 以防止冲突。
- 若不加
3. @Id + @GeneratedValue:主键自增
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id:表示id是 主键。@GeneratedValue(strategy = GenerationType.IDENTITY):IDENTITY:数据库自增(如 MySQLAUTO_INCREMENT)。- 其他策略:
AUTO(默认):JPA 选择合适的策略(通常是SEQUENCE)。SEQUENCE:使用数据库的SEQUENCE机制(如 PostgreSQL)。TABLE:使用 JPA 维护的 ID 生成表(较少用)。
数据库表对应 SQL
id INT PRIMARY KEY AUTO_INCREMENT
4. 普通字段(name、email、age)
private String name;
private String email;
private Integer age;
-
默认映射
- JPA 自动将
String类型映射为VARCHAR。 Integer映射为INT。
- JPA 自动将
-
建议
-
email字段应唯一:@Column(unique = true) private String email; -
字段长度:
@Column(length = 50, nullable = false) private String name;
-
5. @Column:自定义数据库字段
JPA 自动映射,但可用 @Column 进行定制:
@Column(name = "user_name", length = 50, nullable = false)
private String name;
name = "user_name":映射到user_name字段(默认是name)。length = 50:最大长度 50。nullable = false:不允许NULL。
6. Getter 和 Setter 方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
- 作用:
- 供 Spring Boot 读取和设置字段值。
- JPA 需要 getter/setter 方法以进行数据映射。
五.创建数据访问层
1.代码详解
package com.example.demo.repository;
用户仓库接口,用于与数据库交互
import com.example.demo.model.User;
导入用户模型类
import org.springframework.data.jpa.repository.JpaRepository;
导入JPA仓库接口
public interface UserRepository extends JpaRepository<User, Long> {
}
扩展JpaRepository接口,提供基本的CRUD操作
2.使用教程
// 获取所有用户
@GetMapping
public List<User> getUsers() {
return userService.getAllUsers();
}
// 创建用户
@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
// 根据 email 获取用户
@GetMapping("/{email}")
public User getUserByEmail(@PathVariable String email) {
return userService.getUserByEmail(email);
}
// 删除用户
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
六.创建控制层
1. 代码结构
UserController.java 主要负责 处理 HTTP 请求,包括:
- GET 请求
/:获取用户列表,显示在页面上。 - POST 请求
/add:添加新用户并存入数据库。
2. 代码逐行解析
(1) 指定包名
package com.example.demo.controller;
package关键字:声明UserController.java属于com.example.demo.controller包。- 包的作用:组织代码,避免类名冲突。
(2) 导入相关类
// 导入用户模型类
import com.example.demo.model.User;
// 导入用户仓库接口
import com.example.demo.repository.UserRepository;
// 导入自动装配注解
import org.springframework.beans.factory.annotation.Autowired;
// 导入控制器注解
import org.springframework.stereotype.Controller;
// 导入模型对象注解
import org.springframework.ui.Model;
// 导入模型属性注解
import org.springframework.web.bind.annotation.*;
各个 import 语句的作用:
import com.example.demo.model.User;- 导入
User实体类,用于表示数据库user表。
- 导入
import com.example.demo.repository.UserRepository;- 导入
UserRepository数据访问层,用于数据库操作。
- 导入
import org.springframework.beans.factory.annotation.Autowired;- 导入
@Autowired,用于 自动装配UserRepository。
- 导入
import org.springframework.stereotype.Controller;- 导入
@Controller,标记UserController为 Spring MVC 控制器。
- 导入
import org.springframework.ui.Model;- 导入
Model,用于向前端传递数据。
- 导入
import org.springframework.web.bind.annotation.*;- 导入 Spring Web 相关注解(
@GetMapping、@PostMapping、@ModelAttribute等)。
- 导入 Spring Web 相关注解(
(3) 标记 UserController 为 Spring MVC 控制器
// 标记该类为Spring MVC控制器
@Controller
public class UserController {
-
@Controller作用:
- 让 Spring 识别
UserController作为 Web 控制器。 - 允许该类 接收 HTTP 请求 并 返回 HTML 视图。
- 让 Spring 识别
(4) 自动装配 UserRepository
// 自动装配用户仓库实例
@Autowired
private UserRepository userRepository;
@Autowired作用:- 自动注入
UserRepository实例,无需手动创建对象。
- 自动注入
UserRepository作用:- 继承
JpaRepository<User, Long>,提供 CRUD(增删改查)数据库操作。
- 继承
(5) 处理 GET 请求 /
// 处理GET请求,路径为"/"
@GetMapping("/")
public String showUsers(Model model) {
@GetMapping("/"):- 处理
/(首页) 的 GET 请求。 - 访问
http://localhost:8080/时,会调用showUsers()方法。
- 处理
(6) 查询用户并传递给前端
// 将所有用户添加到模型中
model.addAttribute("users", userRepository.findAll());
// 将新的用户对象添加到模型中
model.addAttribute("user", new User());
-
userRepository.findAll():- 查询数据库中的所有用户列表。
-
model.addAttribute("users", userRepository.findAll());:
- 把
users列表存入Model,传递给前端。
- 把
-
model.addAttribute("user", new User());:
- 创建一个 空用户对象,用于 表单绑定(新增用户)。
(7) 返回视图
// 返回视图名称"index"
return "index";
-
返回
"index":- 渲染
src/main/resources/templates/index.html页面(默认Thymeleaf解析)。
- 渲染
-
前端页面 (
index.html):<table> <tr th:each="user : ${users}"> <td th:text="${user.id}"></td> <td th:text="${user.name}"></td> <td th:text="${user.email}"></td> </tr> </table>
(8) 处理 POST 请求 /add
// 处理POST请求,路径为"/add"
@PostMapping("/add")
public String addUser(@ModelAttribute User user) {
-
@PostMapping("/add"):
- 处理
/add路径的 POST 请求(表单提交)。
- 处理
-
@ModelAttribute User user:
- Spring 自动将 表单提交的数据 绑定到
User实体。
- Spring 自动将 表单提交的数据 绑定到
(9) 保存用户到数据库
// 保存用户到数据库
userRepository.save(user);
-
userRepository.save(user);:
- 自动把用户数据插入
user表(Spring Data JPA)。 - 如果
id为空 → 新增用户。 - 如果
id不为空 → 更新用户信息。
- 自动把用户数据插入
(10) 重定向到 /
// 重定向到根路径"/"
return "redirect:/";
- 返回
"redirect:/":- 表单提交后刷新页面,避免重复提交问题。
3. UserController 执行流程
| 步骤 | 说明 | 代码 |
|---|---|---|
| 1 | 访问 http://localhost:8080/ | @GetMapping("/") |
| 2 | showUsers() 查询用户数据 | userRepository.findAll() |
| 3 | index.html 显示用户列表 | model.addAttribute("users", users) |
| 4 | 用户填写表单并点击提交 | <form action="/add" method="post"> |
| 5 | @PostMapping("/add") 处理数据 | @ModelAttribute User user |
| 6 | save(user) 保存到数据库 | userRepository.save(user) |
| 7 | 重定向回 / 显示新用户 | return "redirect:/" |
4.完整代码
// 控制器类,用于处理用户相关的HTTP请求
package com.example.demo.controller;
// 导入用户模型类
import com.example.demo.model.User;
// 导入用户仓库接口
import com.example.demo.repository.UserRepository;
// 导入自动装配注解
import org.springframework.beans.factory.annotation.Autowired;
// 导入控制器注解
import org.springframework.stereotype.Controller;
// 导入模型对象注解
import org.springframework.ui.Model;
// 导入模型属性注解
import org.springframework.web.bind.annotation.*;
// 标记该类为Spring MVC控制器
@Controller
public class UserController {
// 自动装配用户仓库实例
@Autowired
private UserRepository userRepository;
// 处理GET请求,路径为"/"
@GetMapping("/")
public String showUsers(Model model) {
// 将所有用户添加到模型中
model.addAttribute("users", userRepository.findAll());
// 将新的用户对象添加到模型中
model.addAttribute("user", new User());
// 返回视图名称"index"
return "index";
}
// 处理POST请求,路径为"/add"
@PostMapping("/add")
public String addUser(@ModelAttribute User user) {
// 保存用户到数据库
userRepository.save(user);
// 重定向到根路径"/"
return "redirect:/";
}
}
七.创建视图界面
<!-- 遍历用户列表 -->
<tr th:each="user : ${users}">
<!-- 显示用户ID -->
<td th:text="${user.id}"></td>
<!-- 显示用户姓名 -->
<td th:text="${user.name}"></td>
<!-- 显示用户邮箱 -->
<td th:text="${user.email}"></td>
<!-- 显示用户年龄 -->
<td th:text="${user.age}"></td>
</tr>
1.详解代码
<tr th:each="user : ${users}">
th:each是Thymeleaf的一个属性,用于遍历集合。user是循环变量,表示当前遍历的用户对象。${users}是一个模型属性,表示用户列表。
<td th:text="${user.id}"></td>
th:text是Thymeleaf的一个属性,用于设置元素的文本内容。${user.id}表示当前用户对象的ID属性。
<td th:text="${user.name}"></td>
${user.name}表示当前用户对象的姓名属性。
<td th:text="${user.email}"></td>
${user.email}表示当前用户对象的邮箱属性。
<td th:text="${user.age}"></td>
${user.age}表示当前用户对象的年龄属性。
2.完整的 Thymeleaf 用户表格
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
<th>年龄</th>
</tr>
<tr th:each="user : ${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.email}"></td>
<td th:text="${user.age}"></td>
</tr>
</table>
如果 users 传递的数据如下:
List<User> users = new ArrayList<>();
users.add(new User(1L, "张三", "zhangsan@example.com", 25));
users.add(new User(2L, "李四", "lisi@example.com", 30));
则 Thymeleaf 解析后,前端页面渲染出的 HTML:
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
<th>年龄</th>
</tr>
<tr>
<td>1</td>
<td>张三</td>
<td>zhangsan@example.com</td>
<td>25</td>
</tr>
<tr>
<td>2</td>
<td>李四</td>
<td>lisi@example.com</td>
<td>30</td>
</tr>
</table>
3.users 数据从哪里来?
在 Spring Boot 控制器中, users是从数据库中查询得到的,并通过 UserController.java部分代码,这个在上文讲到。
Spring MVC 处理流程:
- 用户访问
/,触发showUsers()方法。 Model传递给前端,即userRepository.findAll()查询数据库,获取所有用户数据。model.addAttribute("users", userRepository.findAll())将用户数据传递给Thymeleaf。Thymeleaf在index.html中循环遍历users,动态渲染表格。
八.创建启动器
这段代码是 Spring Boot 项目的入口类,它负责启动 Spring Boot 应用。
Spring Boot 应用的运行从 main 方法开始,@SpringBootApplication注解让 Spring Boot 自动完成
项目的初始化、配置和运行。
// 主类,用于启动Spring Boot应用程序
package com.example.demo;
// 导入Spring Boot应用程序启动类注解
import org.springframework.boot.SpringApplication;
// 导入Spring Boot自动配置注解
import org.springframework.boot.autoconfigure.SpringBootApplication;
// 标记该类为Spring Boot应用程序的入口点
@SpringBootApplication
public class DemoApplication {
// 主方法,程序的入口点
public static void main(String[] args) {
// 运行Spring Boot应用程序
SpringApplication.run(DemoApplication.class, args);
}
}
1. 代码结构
@SpringBootApplication
public class DemoApplication {
// 主方法,程序的入口点
public static void main(String[] args) {
// 运行Spring Boot应用程序
SpringApplication.run(DemoApplication.class, args);
}
}
2. 代码详解
(1) @SpringBootApplication 注解
@SpringBootApplication
@SpringBootApplication 是 Spring Boot 的核心注解,它相当于以下三个注解的组合:
@Configuration:表示该类是 Spring 的配置类,可用于定义Bean。@EnableAutoConfiguration:让 Spring Boot 自动配置应用程序所需的组件(例如数据库连接、Web 服务器等)。@ComponentScan:自动扫描@Component、@Service、@Controller、@Repository等 Spring 组件,并将它们注册到 Spring 容器中。
这些注解的作用包括:
- 自动配置 Spring Boot 应用程序。
- 扫描并加载
@Component、@Service、@Repository、@Controller等 Spring 组件,并注册为Bean。 - 简化 Spring 配置,无需手写 XML 配置文件。
(2) main 方法
public static void main(String[] args) {
// Java 程序的主方法,是应用程序的入口,执行后会启动 Spring Boot 应用。
SpringApplication.run(DemoApplication.class, args);
}
main 方法是 Java 程序的主方法,是应用程序的入口。执行后会启动 Spring Boot 应用。当 JVM 运行 Java 程序时,首先执行 main 方法,然后启动 Spring Boot 运行环境。
(3) SpringApplication.run() 方法
SpringApplication.run(DemoApplication.class, args);
SpringApplication.run() 是 Spring Boot 的核心方法,用于启动 Spring Boot 应用。其参数包括:
DemoApplication.class:指定 Spring Boot 启动类,Spring Boot 以此类为起点启动。args:传递命令行参数。
其执行流程包括:
- 启动 Spring Boot 应用(初始化
SpringApplication)。 - 创建 Spring 上下文(
ApplicationContext,自动创建的)。 - 加载自动配置(
@EnableAutoConfiguration)。 - 扫描并注册
@Component、@Service、@Repository、@Controller等Bean。 - 如果是 Web 应用,启动嵌入式 Web 服务器。
- 执行
CommandLineRunner或ApplicationRunner(如果有)。
3. Spring Boot 应用的启动流程
执行 SpringApplication.run(DemoApplication.class, args); 时,Spring Boot 自动完成以下任务:
- 初始化 Spring 环境,创建
ApplicationContext。 - 自动加载配置(比如数据库、日志、Spring MVC)。
- 扫描并注册
@Component、@Service、@Repository、@Controller等Bean。 - 如果是 Web 应用,启动嵌入式 Web 服务器。
- 执行
@Controller并注册Bean。 - 执行
CommandLineRunner或ApplicationRunner(如果有)。
4. 运行 Spring Boot 应用
Spring Boot 自动启动嵌入式 Web 服务器,应用将运行在 http://localhost:8080/(本地服务器,端口号默认 8080)。
最终项目文件结构

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)