系列文章
从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目
从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库
目录
1. 添加 MyBatis-Plus 相关依赖(pom.xml)
2. 创建 Mapper 接口(DemoMapper.java)
3. 创建服务层(DemoService.java & DemoServiceImpl.java)
4. 改造 Controller(DemoController.java)
一、项目基础环境说明
- 开发工具:IDEA
- JDK 版本:1.8
- 数据库:MySQL 5.7
- 构建工具:Maven 3.6
- 技术栈:Spring Boot + MyBatis-Plus + Freemarker + Druid
二、数据库整合流程
1. 添加 MyBatis-Plus 相关依赖(pom.xml)
在原有项目基础上,添加数据库驱动、连接池及 MyBatis-Plus 依赖:
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!-- MyBatis-Plus核心依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
2. 配置数据库连接(application.yml)
修改配置文件,添加数据源及 MyBatis-Plus 配置:
spring:
# 数据库配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/pearl_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource # 使用Druid连接池
druid:
initial-size: 5 # 初始连接数
min-idle: 5 # 最小空闲连接数
max-active: 20 # 最大活跃连接数
max-wait: 60000 # 最大等待时间(毫秒)
validation-query: SELECT 1 FROM DUAL # 验证SQL
# MyBatis-Plus配置
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml # Mapper映射文件路径
type-aliases-package: com.pearl.modules.*.entity # 实体类别名包
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志输出
3. 编写 MyBatis-Plus 配置类
在com.pearl.config
包下创建MyBatisPlusConfig
类,配置分页插件:
package com.pearl.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MyBatis-Plus配置类
*/
@Configuration
public class MyBatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
4. 创建数据库表(SQL 示例)
CREATE DATABASE IF NOT EXISTS pearl_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE pearl_db;
CREATE TABLE demo_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR(50) NOT NULL COMMENT '姓名',
age INT COMMENT '年龄',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) COMMENT '用户表';
-- 插入测试数据
INSERT INTO demo_user (name, age) VALUES ('张三', 25), ('李四', 30);
三、后台代码开发
1. 创建实体类(Demo.java)
在com.pearl.modules.demo.entity
包下创建实体类,使用 Lombok 简化代码:
package com.pearl.modules.demo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 用户实体类
*/
@Data
@TableName("demo_user")
public class Demo {
private Long id;
private String name;
private Integer age;
}
2. 创建 Mapper 接口(DemoMapper.java)
在com.pearl.modules.demo.mapper
包下创建 Mapper 接口,继承BaseMapper
:
package com.pearl.modules.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pearl.modules.demo.entity.Demo;
/**
* 用户Mapper接口
*/
public interface DemoMapper extends BaseMapper<Demo> {
}
3. 创建服务层(DemoService.java & DemoServiceImpl.java)
接口定义(DemoService.java)
package com.pearl.modules.demo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pearl.modules.demo.entity.Demo;
/**
* 用户服务接口
*/
public interface DemoService extends IService<Demo> {
}
实现类(DemoServiceImpl.java)
package com.pearl.modules.demo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pearl.modules.demo.entity.Demo;
import com.pearl.modules.demo.mapper.DemoMapper;
import com.pearl.modules.demo.service.DemoService;
import org.springframework.stereotype.Service;
/**
* 用户服务实现类
*/
@Service
public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService {
}
4. 改造 Controller(DemoController.java)
修改原有 Controller,添加用户列表查询逻辑:
package com.pearl.modules.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.pearl.modules.demo.entity.Demo;
import com.pearl.modules.demo.service.DemoService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import java.util.List;
/**
* Demo控制器
*/
@Controller
@RequestMapping("/demo")
public class DemoController {
@Resource
private DemoService demoService;
/**
* 查看用户列表
*/
@RequestMapping("/list")
public String list(Model model) {
// 查询所有用户(示例:按年龄降序)
QueryWrapper<Demo> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("age");
List<Demo> userList = demoService.list(wrapper);
model.addAttribute("userList", userList);
return "demo"; // 对应Freemarker页面
}
}
四、前端页面开发(demo.ftl)
修改resources/templates/demo.ftl
,展示用户列表:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户管理</title>
</head>
<body>
<h2>用户列表</h2>
<table border="1">
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<#list userList as user>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</#list>
</table>
</body>
</html>
五、测试验证
- 启动 Spring Boot 应用(运行
PearlBootApplication
) - 访问地址:
http://127.0.0.1:8080/demo/list
- 预期结果:页面显示数据库中存储的用户列表,按年龄降序排列
六、常见问题处理
1. 数据库连接失败
- 检查
application.yml
中的数据库 URL、用户名、密码是否正确 - 确保 MySQL 服务已启动,数据库已创建
2. 页面无数据显示
- 检查 SQL 日志是否输出正确查询语句(MyBatis-Plus 配置中
log-impl
已开启) - 确认数据库表中有测试数据
3. Freemarker 页面报错
- 检查模板文件路径是否为
resources/templates/demo.ftl
- 确保 Controller 返回的视图名与文件名一致(不包含扩展名)