前言
学习。
环境搭建
使用IDEA新建Spring Boot项目,选择安装Spring Web、Thymeleaf和MyBatis框架,由于使用的是JDK8,SpringBoot不支持JDK8,因此选用SpringBoot2。
简单编写控制器框架后,在虚拟机中开启MySQL镜像:
docker run -id --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
创建数据库
创建测试用数据库:
create database mybatis DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use mybatis;
create table data(id int(11) not null auto_increment, name varchar(255), password varchar(255), email varchar(255), primary key (id))engine=innodb default charset=utf8 COLLATE=utf8_general_ci;
连接数据库
设置数据库连接池,这里安装Druid:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.17</version>
</dependency>
然后修改配置文件:
spring.datasource.url=jdbc:mysql://192.168.88.129:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
报错:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
没有MySQL的相关驱动,安装依赖:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
在官方文档中可以找到MyBatis的使用方法,首先根据数据库结构定义对应的数据类:
public class DataDao {
private int id;
private String name;
private String password;
private String email;
// Getter和Setter们
}
然后定义查询用的SQL语句:
@Mapper
public interface DataMapper {
@Select("select * from data")
List<DataDao> selectAll();
}
为了使用整个映射接口,还需要借助Spring的依赖注入机制:
@Service
public class DataService {
private DataMapper dataMapper;
@Autowired
public DataService(DataMapper dataMapper) {
this.dataMapper = dataMapper;
}
public List<DataDao> selectAll() {
return dataMapper.selectAll();
}
}
虽然依赖注入IDEA会提示错误,但是实际上不影响,可以修改警告等级关掉它,最后在控制器中查询并输出:
@Autowired
private DataService dataService;
@GetMapping("/main")
public String main(Model model){
List<DataDao> data = dataService.selectAll();
model.addAttribute("data", data);
return "main";
}
模板文件:
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Main</title>
</head>
<body>
<h1>main</h1>
<p th:each="data: ${data}">
<span th:text="${data.id}"></span>
<span th:text="${data.name}"></span>
<span th:text="${data.password}"></span>
<span th:text="${data.email}"></span>
</p>
</body>
</html>
可以看到查询成功。