從零搭建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
繁體地址,請注明出處:http://hk.pswp.cn/news/906913.shtml
英文地址,請注明出處:http://en.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;表掃描、索引維護和數據遷移會變得非常慢。單…