初学者应直接使用Spring Boot+Thymeleaf+H2+JPA搭建博客系统,避免手写MVC和数据库连接池;需正确配置主键注解、表单绑定及application.properties,重点关注日志末尾的Caused by错误。
Java初学者做博客管理系统,不建议从零手写全套 MVC 架构、数据库连接池、权限控制——那样容易卡在 ClassNotFoundException 或 SQLException: No suitable driver found 三天没跑出首页。直接用 Spring Boot + Thymeleaf + H2(开发阶段)+ JPA 是最务实的起点。
手动配 web.xml、写 HttpServlet 子类、自己解析 POST 表单——这些不是练手,是自设路障。Spring Boot 的 @RestController 和 @Controller 能把路由、参数绑定、JSON 返回全包圆。
实操建议:
Spring Web、Spring Data JPA、Thymeleaf、H2 Database(开发用)、Lombok(省掉 getter/setter)pom.xml 里有 spring-boot-starter-web 和 spring-boot-starter-data-jpa
Application.java 里的测试逻辑,先跑通空项目:启动后访问 http://localhost:8080 看是否返回 Whitelabel Error Page(说明容器已起来)@Id 和 @GeneratedValue
很多初学者写完 Blog 类,加了 @Entity 就以为完事,结果启动报错:org.hibernate.AnnotationException: No identifier specified for entity

正确写法示例(用 Lombok 简化):
@Entity
public class Blog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
private LocalDateTime createdAt;
// 构造、getter/setter(Lombok 自动生成)
}
注意点:
GenerationType.IDENTITY 对应 H2 的 IDENTITY 列类型,别写成 AUTO(H2 不支持)LocalDateTime 需要数据库列类型为 TIMESTAMP,H2 默认支持;若换 MySQL,需在 application.properties 加 spring.jpa.properties.hibernate.jdbc.time_zone=UTC 避免时区错乱id 字段加 @Column(name = "id")——冗余,JPA 默认就映射同名字段th:object 和 th:field,别混用 th:value
想做一个新建博客的表单,写成这样会失败:
问题在于:th:value 和 th:text 不绑定对象属性,提交时后端收不到数据;且没启用 Spring 的表单绑定机制,@ModelAttribute 参数为空。
正确写法(必须配对使用):
关键点:
th:object 指定绑定对象(传入 Model 的 key,如 model.addAttribute("blog", new Blog()))th:field="*{xxx}" 自动渲染 name="xxx" 并填入值,还支持错误提示(配合 BindingResult)th:name 手动写 name 属性——破坏双向绑定,后端收不到application.properties 和日志末尾的 Caused by启动失败八成不是代码写错,而是配置漏项或版本冲突。比如:
application.properties 写 spring.datasource.url=jdbc:h2:mem:testdb → 报 Failed to configure a DataSource
http://localhost:8080/h2-console,得加 spring.h2.console.enabled=true
InvalidDataAccessResourceUsageException: Column "XXX" not found,此时删掉 spring.datasource.url 末尾的 ;DB_CLOSE_DELAY=-1 并重启,或加 spring.sql.init.mode=always 重跑 schema日志里真正有用的线索永远在最后一段 Caused by:,而不是开头几百行的 Hibernate 启动日志。盯住它,比反复改代码快十倍。