当前位置: 首页 > ops >正文

从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库

系列文章

从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目

从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库

目录

一、项目基础环境说明

二、数据库整合流程

1. 添加 MyBatis-Plus 相关依赖(pom.xml)

2. 配置数据库连接(application.yml)

3. 编写 MyBatis-Plus 配置类

4. 创建数据库表(SQL 示例)

三、后台代码开发

1. 创建实体类(Demo.java)

2. 创建 Mapper 接口(DemoMapper.java)

3. 创建服务层(DemoService.java & DemoServiceImpl.java)

4. 改造 Controller(DemoController.java)

四、前端页面开发(demo.ftl)

五、测试验证

六、常见问题处理

1. 数据库连接失败

2. 页面无数据显示

3. Freemarker 页面报错


一、项目基础环境说明

  • 开发工具: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.Driverurl: jdbc:mysql://localhost:3306/pearl_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456type: 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 {/*** 分页插件*/@Beanpublic 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 {@Resourceprivate 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>

 

五、测试验证

  1. 启动 Spring Boot 应用(运行PearlBootApplication
  2. 访问地址:http://127.0.0.1:8080/demo/list
  3. 预期结果:页面显示数据库中存储的用户列表,按年龄降序排列

 

六、常见问题处理

1. 数据库连接失败

  • 检查application.yml中的数据库 URL、用户名、密码是否正确
  • 确保 MySQL 服务已启动,数据库已创建

2. 页面无数据显示

  • 检查 SQL 日志是否输出正确查询语句(MyBatis-Plus 配置中log-impl已开启)
  • 确认数据库表中有测试数据

3. Freemarker 页面报错

  • 检查模板文件路径是否为resources/templates/demo.ftl
  • 确保 Controller 返回的视图名与文件名一致(不包含扩展名)

 

http://www.xdnf.cn/news/7720.html

相关文章:

  • Mysql的binlog日志
  • .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
  • 八: 人工神经元/感知机 算法
  • Python数据可视化高级实战之一——绘制GE矩阵图
  • Windows安装MongoDb.并使用.NET 9连接
  • 深度学习+Flask 打包一个AI模型接口并部署上线
  • 【优秀三方库研读】在 quill 开源库中定义的 QUILL_LIKELY 和 QUILL_UNLIKELY 这两个宏的作用是什么
  • 【教程】Nuitka | Python打包exe新工具
  • Python 包管理工具核心指令uv sync解析
  • Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用
  • 什么是车载座舱产品的SRRC认证?
  • function calling简介
  • Vue组件开发深度指南:构建可复用与可维护的UI
  • python的加速方法
  • 【固废处理核心痛点】RS485转Profinet协议转换,如何提升设备监控效率?​​
  • Python训练营打卡31
  • 2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
  • git 撤销最近的几次push
  • Linux系统编程-DAY01
  • 动态DNS管理:【etcd+CoreDNS】 vs【BIND9】便捷性对比
  • Profinet转RS485网关赋能热敏CTP冲版机:高精度数据交互的核心解码方案​​
  • C++静态函数错误解析与修复指南练习
  • 编程技能:字符串函数08,strcmp
  • 刚刚!2025年5月WOS期刊目录已更新,新增多本期刊,剔除1本SCI期刊,慎投!
  • 软件测试期末复习
  • 深入解析OrientDB:多模型数据库的技术优势与实际应用
  • 如何从不同位置将联系人导入 iPhone(完整指南)
  • STM32定时器简单采集编码器脉冲
  • 【ubuntu服务器显卡老是坏掉】
  • BGP边界网关协议