Bootstrap

基于 Thymeleaf、MyBatis 和 Spring Boot 开发学习

1. 引言


Spring Boot 是一个快速创建基于 Spring 框架的应用的框架,而 Thymeleaf 是一个用于渲染动态 HTML 页面的数据驱动的模板引擎,MyBatis 则是一种灵活的持久层框架,简化了数据库操作。本文将介绍如何将 Thymeleaf、MyBatis 和 Spring Boot 一起使用,构建一个简单的 web 应用。###

2. 项目环境与工具

- 开发工具:IntelliJ IDEA
- 构建工具:Maven
- 数据库:MySQL
- Spring Boot:3.0.3
- Thymeleaf:Spring Boot 默认集成
- MyBatis:通过 `mybatis-spring-boot-starter` 依赖集成

3. 项目结构设计

项目结构如下:


project-root

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.example.demo
│   │   │       ├── controller
│   │   │       ├── service
│   │   │       ├── mapper
│   │   │       ├── entity
│   │   │       └── DemoApplication.java
│   │   ├── resources
│   │   │   ├── mapper
│   │   │   │   └── UserMapper.xml
│   │   │   ├── templates
│   │   │   │   └── user-list.html
│   │   │   ├── application.yml
│   └── test
└── pom.xml (或 build.gradle)
 

4. 依赖配置

Maven 配置

在 `pom.xml` 文件中添加以下依赖:

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Thymeleaf -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.0</version>
    </dependency>

    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot 测试 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>


 

application.yml

server:
  servlet:
    context-path: /demo
spring:
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html

  datasource:
    type: com.mysql.cj.jdbc.MysqlDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my-tieba?characterEncoding=UTF-8
    username: root
    password: root


mybatis:
  mapper-locations: classpath:com/example/mapper/*.xml
  type-aliases-package: com.example.entity

logging:
  level:
    root: info
    com.example: debug



 

6. 创建实体类

在 `com.example.demo.entity` 包中创建实体类 `User`,与数据库中的表对应:

(使用了lombok)

@Setter
@Getter
public class User {
    private Long id;
    private String name;
    private String email;
}


 

7. 创建 MyBatis Mapper 接口和 XML

7.1. Mapper 接口

在 `com.example.demo.mapper` 包中创建 `UserMapper` 接口:

@Mapper
public interface UserMapper {
    List<User> findAll();
}


7.2. XML 文件

在 `resources/mapper` 目录下创建 `UserMapper.xml`:

<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="findAll" resultType="com.example.demo.entity.User">
        SELECT * FROM users;
    </select>
</mapper>


 

8. 创建 Service 层

在 `com.example.demo.service` 包中创建 `UserService` 类,封装业务逻辑:


@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers() {
        return userMapper.findAll();
    }
}


 

9. 创建 Controller 层

在 `com.example.demo.controller` 包中创建 `UserController` 类,处理客户端请求并返回视图:

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String getAllUsers(Model model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "user-list";
    }
}


 

10. Thymeleaf 模板

在 `resources/templates` 目录下创建 `user-list.html`,用于展示用户列表:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="user : ${users}">
                <td th:text="${user.id}"></td>
                <td th:text="${user.name}"></td>
                <td th:text="${user.email}"></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

11. 启动类

com.example.demo 包中创建 Spring Boot 启动类 DemoApplication

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

总结

通过将 Thymeleaf、MyBatis 和 Spring Boot 集成在一起,可以快速构建一个数据库驱动的动态 Web 应用。Thymeleaf 简化了视图层的动态渲染,MyBatis 则通过 XML 或注解方式简化了数据库操作,而 Spring Boot 提供了一个极简的配置和启动方式,使得开发变得高效。

;