创建一个新项目
- 点击Create New Project
- 选择左侧的Spring Initializr
- 在右边,选择 default 从 https://start.spring.io 创建,点击 Next
- 在接下来的页面中,填写相关信息,比如 组/项目名, 指定创建
Gradle
项目,点击 Next - 在这个页面中,添加我们项目中需要用到的 Spring 插件,一般来说 Web / Jpa / Thymeleaf / MySQL 点击 Next
- 然后,填写项目名字,指定保存目录,点击 Finish,确认初始化 Gradle 项目就可以了。
配置我们的 Springboot 参数
- 修改配置我们的 build.gradle 然后刷新
apply plugin: 'idea'
ext['thymeleaf.version'] = '3.0.9.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.2.2'
- 在 application.properties 修改基础参数
server.port=6666
spring.datasource.url=jdbc:mysql://localhost:3306/another_springboot_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.thymeleaf.mode=html
spring.thymeleaf.cache=false
spring.messages.encoding=GBK
- 开启 MySQL 服务, 在 MySQL 中创建相关的数据库
create database another_springboot_db
- 开启我们的服务器 localhost:6666
创建 Book 模块, 在里面分别创建 entity/dao/controller
- 创建 model/Author.java
@Entity
public class Author {
@Id
@GeneratedValue
private Long id;
private String name;
private String telephone;
@OneToMany(mappedBy = "author")
private List<Book> books;
//...
}
- 创建 model/Book.java
- 创建 dao/AuthorDAO.java
public interface AuthorDAO extends JpaRepository<Author, Long> {
}
- 创建 dao/BookDAO.java
- 创建 web/AuthorController.java
@Controller
public class AuthorController {
@Autowired
private AuthorDAO authorDAO;
@GetMapping("/author_add")
public String add() {
return "book/add_author";
}
@PostMapping("/author_add")
public String store(Author author) {
authorDAO.save(author);
return "redirect:author_add";
}
}
- 创建 web/BookController.java
为 Book 模块创建 Thymeleaf 模板 Layout
- 首先,在 resource 目录下面创建资源文件 messages.properties
- 在资源文件里面,添加要使用的公共参数
- 创建公共布局文件 layout/book.html
Book 增加功能示例
- 在 BookController 里面创建两个方法 add/save 分别用来呈现添加的 form 表单还有处理 form 请求
@GetMapping("/add")
public String add(Model model) {
model.addAttribute("authors", authorDAO.findAll());
return "book/add";
}
@PostMapping("/add")
public String save(Book book, Model model) {
bookDAO.save(book);
return "redirect:index";
}
- 为新增书籍创建 form 表单页面,使用我们定义的 layout 扩展
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="layout/book">
<head>
<title>书籍添加</title>
</head>
<div layout:fragment="content">
<form th:action="@{/book/add}" method="post">
<div class="form-group">
<label for="name">名字</label>
<input type="text" class="form-control" id="name" name="name">
</div>
<div class="form-group">
<label for="price">价格</label>
<input type="number" class="form-control" id="price" name="price">
</div>
<div class="form-group">
<label for="author">作者</label>
<select class="form-control" id="author" name="author.id">
<option value="-1">请选择</option>
<option th:each="author : ${authors}"
th:value="${author.id}"
th:text="${author.name}">作者</option>
</select>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</html>
为新增页面添加相关验证
- 首先,推荐使用 Java 的 JSR-303 规范的验证框架
- 在实体类上加上 @NotBlank / @NotNull / @Size / @Pattern / @Email 等注解
- 在控制器里,为数据绑定的类,提供 @Valid 注解,并 紧跟着 一个 BindingResult 对象用来接收校验结果
- 在页面中,使用 th:if(${fields.hasErrors()}) / th:errors 等方法显示出错信息
- 其次,其他简单错误使用 errors.reject() 的方法在 Controller 里手动校验
if(book.getAuthor() == null || book.getAuthor().getId() < 1) {
errors.rejectValue("author", null, "您需要填写作者的信息哦!");
}
if(errors.hasErrors()) {
model.addAttribute("authors", authorDAO.findAll());
return "book/add";
}
- 然后,一些更复杂,需要重用的校验逻辑,你可以:
- 自定义 JSR 标准的校验注解和校验类
- 自定义 Spring 的校验器