从零搭建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.pswp.cn/news/906913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4款顶级磁力下载工具,速度提升器,可以变下变播

今天给大家带来一些超给力的磁力下载工具&#xff0c;速度飞快&#xff0c;最高可达20MB/s&#xff0c;而且还能边下边播&#xff01; 下载链接&#xff1a;夸克网盘分享&#xff08;点击蓝色字体自行保存下载&#xff09; 一、柚子下载 柚子下载界面干净&#xff0c;没有广…

怎样判断服务器网络质量的状态?

服务器存储着企业的重要数据信息&#xff0c;服务器的网络质量会影响到用户访问数据信息的速度&#xff0c;也决定着网站页面是否会出现卡顿或页面崩溃的情况&#xff0c;那我们对于服务器中网络质量的状态该如何进行判断呢&#xff1f; 服务器的网络状态通常是指服务器与外部网…

零基础入门Selenium自动化测试:自动登录edu邮箱

&#x1f31f; Selenium简单概述一下 Selenium 是一个开源的自动化测试工具&#xff0c;主要用于 Web 应用程序的功能测试。它能够模拟用户操作浏览器的行为&#xff08;如点击按钮、填写表单、导航页面等&#xff09;&#xff0c;应用于前端开发、测试和运维领域。 特点 跨…

day36 python神经网络训练

目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中&#xff0c;信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型&#xff0c;我们可以对客户的信用…

如何确定是不是一个bug?

在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。如何准确判断一个问题是否属于Bug?本文将从Bug的定义、判定标准、常见误区和实战技巧四个方面展开,帮助测试工程师提高Bug判定的准确性。 1. Bug的定义:什么情况下算Bug? 一个Bug(缺陷)通常指软件…

Lombok与Jackson实现高效JSON序列化与反序列化

引言 在Java开发中&#xff0c;处理JSON数据是常见需求&#xff0c;而Jackson作为广泛使用的JSON库&#xff0c;能够高效地将Java对象与JSON互相转换。然而&#xff0c;传统的POJO&#xff08;Plain Old Java Object&#xff09;需要手动编写大量样板代码&#xff08;如getter…

论文阅读:PURPLE: Making a Large Language Model a Better SQL Writer

论文地址&#xff1a;PURPLE: Making a Large Language Model a Better SQL Writer 摘要 大语言模型&#xff08;LLM&#xff09;技术在自然语言到 SQL&#xff08;NL2SQL&#xff09;翻译中扮演着越来越重要的角色。通过大量语料训练的 LLM 具有强大的自然语言理解能力和基本…

【图像大模型】ControlNet:深度条件控制的生成模型架构解析

ControlNet&#xff1a;深度条件控制的生成模型架构解析 一、核心原理与技术突破1.1 基础架构设计1.2 零卷积初始化1.3 多条件控制机制 二、系统架构与实现细节2.1 完整处理流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码3.3 高级控制参数 四、典型问题解…

【从0到1搞懂大模型】chatGPT 中的对齐优化(RLHF)讲解与实战(9)

GPT系列模型的演进 chatgpt系列模型演进的重要节点包含下面几个模型&#xff08;当然&#xff0c;这两年模型发展太快了&#xff0c;4o这些推理模型我就先不写了&#xff09; (Transformer) → GPT-1 → GPT-2 → GPT-3 → InstructGPT/ChatGPT(GPT-3.5) → GPT-4 下面介绍一…

2025年AEI SCI1区TOP,改进麻雀搜索算法MSSA+建筑三维重建,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.整体框架4.改进SSA算法5.结果展示6.参考文献7.代码获取8.读者交流 1.摘要 对现有建筑进行高质量的三维重建对于其维护、修复和管理至关重要。图像采集中的有效视角规划会显著影响基于摄影测量的三维重建质量。复杂的建筑结构常常导致传统视…

鸿蒙开发:如何实现列表吸顶

前言 本文基于Api13 列表吸顶功能&#xff0c;在实际的开发中有着很大的作用&#xff0c;比如可以让列表层级之间更加分明&#xff0c;减少一定程度上的视觉混乱&#xff0c;由于吸顶的标题会随着滚动固定在顶部&#xff0c;可以让用户无需反复滑动回顶部确认分组位置&#xff…

使用Zotero的RSS订阅功能快速了解感兴趣领域最新文章

文章目录 写在前面中文期刊的RSS订阅英文期刊的RSS订阅回到Zotero有啥用&#xff1f; 写在前面 作为一名研究生或者科研工作者&#xff0c;肯定需要经常检索自己研究领域的最新文献&#xff0c;相比于不定期的去各大数据库检索文献&#xff0c;借助RSS订阅功能则更加便捷。 R…

Windows安装Docker Desktop开启 Kubenetes制作并部署本地镜像

1、安装Docker Desktop docker desktop官方下载链接&#xff0c;下载后一路点下来安装就好了。 2、制作本地镜像 跟着docker步骤制作镜像&#xff0c;需要先配置docker 镜像源&#xff0c;因为网络问题 {"builder": {"gc": {"defaultKeepStorage&…

嵌入式学习笔记 - freeRTOS 列表,链表,节点跟任务之间关系

一 下图说明了 freeRTOS 就绪列表&#xff0c;链表&#xff0c;节点跟任务之间关系 一个任务对应一个节点&#xff0c;一个链表对应一个优先级&#xff0c;一个任务根据优先级可以插入任何一个链表中。 插入函数为&#xff0c;这也是freeRTOS的核心函数&#xff0c;对每个任务…

scikit-learn pytorch transformers 区别与联系

以下是 scikit-learn、PyTorch 和 Transformers 的区别与联系的表格形式展示: 特性/库scikit-learnPyTorchTransformers主要用途传统机器学习算法深度学习框架预训练语言模型与自然语言处理任务核心功能分类、回归、聚类、降维、模型选择等张量计算、自动微分、神经网络构建与…

【C/C++】从零开始掌握Kafka

文章目录 从零开始掌握Kafka一、Kafka 基础知识理解&#xff08;理论&#xff09;1. 核心组件与架构2. 重点概念解析 二、Kafka 面试重点知识梳理三、C 使用 Kafka 的实践&#xff08;librdkafka&#xff09;1. librdkafka 简介2. 安装 librdkafka 四、实战&#xff1a;高吞吐生…

Spyglass:目标文件(.spq)的结构

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 预备知识 为了方便检查&#xff0c;Spyglass向用户提供Guideware作为检查参考&#xff1b;Guideware又包含各种方法(Methodology)&#xff0c;应用于设计的不同阶段&…

一些Dify聊天系统组件流程图架构图

分享一些有助于深入理解Dify聊天模块的架构图 整体组件架构图 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…

地理空间索引:解锁日志分析中的位置智慧

title: 地理空间索引:解锁日志分析中的位置智慧 date: 2025/05/24 18:43:06 updated: 2025/05/24 18:43:06 author: cmdragon excerpt: 地理空间索引在日志分析中应用广泛,涉及用户登录IP定位、移动端位置轨迹和物联网设备位置上报等场景。MongoDB支持2dsphere和2d两种地理…

分库分表深度解析

一、为什么要分库分表&#xff1f; 通常&#xff0c;数据库性能受到如下几个限制&#xff1a; 硬件瓶颈&#xff1a;单机的 CPU、内存、磁盘 I/O 等资源总是有限。例如&#xff0c;当单表中的记录达到上亿、甚至更高时&#xff0c;表扫描、索引维护和数据迁移会变得非常慢。单…