【SpringBoot + MyBatis + MySQL + Thymeleaf 的使用】

目錄:

    • 一:創建項目
    • 二:修改目錄
    • 三:添加配置
    • 四:創建數據表
    • 五:創建實體類
    • 六:創建數據接口
    • 七:編寫xml文件
    • 八:單元測試
    • 九:編寫服務層
    • 十:編寫控制層
    • 十一:創建頁面
    • 十二:返回JSON數據

一:創建項目

?
🟢第一步:打開 IDEA,選擇 New Project,選擇 Spring Boot,然后按照下面截圖進行操作…

在這里插入圖片描述

🟢 第二步:添加依賴 (Spring Web場景啟動器、Thymeleaf依賴、MyBatis依賴、MySQL驅動依賴 等)

在這里插入圖片描述

🟢 稍作等待,IDEA正在幫助我們從Spring官網下載SpringBoot項目的框架,并且正在通過Maven進行構建…

在這里插入圖片描述

🟢在IDEA的右下角會有Maven的下載進度。想了解Maven的使用可以參考:Maven的安裝與配置教程 👈


?

二:修改目錄

?
🟠項目剛創建完的目錄結構大致如下,可能包的路徑名有所區別,一般用自己所在組織的簡拼 👇

https://blog.csdn.net/SuperCodeZhy/article/details/143754767

🟠 添加一些新包,添加之后的項目結構如下 👇

在這里插入圖片描述

🟠一般情況下,還會創建一些名為 utilscommon 的包,是為了方便管理和存放其他工具類等。


?

三:添加配置

?

🟣打開項目的默認配置文件 application.properties ,然后復制粘貼以下代碼 👇

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/數據庫名
spring.datasource.username=數據庫用戶名
spring.datasource.password=數據庫密碼
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

🟣粘貼后修改 數據庫名數據庫用戶名數據庫密碼 ,修改后的效果如下圖所示👇(第一行是項目名,可忽略)

在這里插入圖片描述

🟣通常為了結構更加清晰,會將默認配置文件 application.properties 的后綴 改為 .yml 其配置格式如下:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/數據庫名username: 數據庫用戶名password: 數據庫密碼
mybatis:mapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: true

在這里插入圖片描述

🟣其他配置信息這里就不過多介紹了,大家用到時自會了解~ 😁😁😁


?

接下來,我以 藥品管理 為例,簡單演示一下各模塊代碼的編寫~ 😊😊😊

?

四:創建數據表

?

🟡首先,在 MySQL 數據庫中創建一個數據庫,然后在庫中創建一個 藥品表SQL 如下 👇

CREATE DATABASE `drug`;
USE DATABASE `drug`;
CREATE TABLE `medicine`  (`id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '藥品編號',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '藥品名稱',`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '國藥準字',`compose` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '藥品成分',`specs` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '藥品規格',`usage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用法用量',`image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '藥品照片',`origin` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '生產廠家',`count` int UNSIGNED NOT NULL COMMENT '庫存數量',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

🟡 然后,在數據表中添加幾條數據 (下面是我使用 Navicat 連接了 本地的 MySQL 數據庫的截圖) 👇

在這里插入圖片描述


?

五:創建實體類

?

🔵在 entity 包下創建一個名為 MedicineJava類,如下

package com.nxu.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Medicine {private int id;             // 藥品編號private String name;        // 藥品名稱private String code;        // 國藥準字private String compose;     // 藥品成分private String specs;       // 藥品規格private String usage;       // 用法用量private String image;       // 藥品照片private String origin;      // 生產廠家private int count;          // 庫存數量
}

在這里插入圖片描述


?

六:創建數據接口

?

🔴在 Java目錄下的 mapper 包中,創建一個名為 MedicineMapperJava接口,如下

package com.nxu.mapper;import com.nxu.entity.Medicine;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface MedicineMapper {List<Medicine> selectAllMedicine();Medicine selectOneMedicine(@Param("id") int id);}

在這里插入圖片描述


?

七:編寫xml文件

?

接下來我們要使用 Mybatis 框架編寫 SQL 語句。為了以后使用的方便,可以添加一個 Mybatis模板文件

Mybatis 模板文件的代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=""></mapper>

🟤復制上面的模板代碼,然后打開 IDEAFileSettings,然后進行如下操作 👇

在這里插入圖片描述

在這里插入圖片描述

🟤然后 我們在 resources 目錄下的 mapper 文件中 創建一個名為 MedicineMapper 的 MyBatis XML 文件,并添加以下代碼 👇

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nxu.mapper.MedicineMapper"><select id="selectAllMedicine" resultType="com.nxu.entity.Medicine">select * from medicine</select><select id="selectOneMedicine" resultType="com.nxu.entity.Medicine">select * from medicine where id = #{id}</select></mapper>

🟤這里大家可以安裝一個名為 MyBatisX 的插件,挺好用的,如下 👇

在這里插入圖片描述

🟤安裝好之后,我們的 MyBatis接口 和 MyBatis 的 xml 文件可以點擊小鳥進行跳轉,還有其他提示功能~

在這里插入圖片描述


?

八:單元測試

?

寫到這里,我們可以先簡單的做個單元測試,確保數據庫連通,以及測試 MyBatis 是否可以正常使用。😀😀😀

🟢在我們的 test 目錄下,新建一個名為 MedicineTestJava測試類,然后添加以下代碼進行測試 👇

package com.nxu;import com.nxu.entity.Medicine;
import com.nxu.mapper.MedicineMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@Slf4j
@SpringBootTest
public class MedicineTest {@Autowiredprivate MedicineMapper medicineMapper;@Testpublic void testSelectAllMedicine() {List<Medicine> allMedicine = medicineMapper.selectAllMedicine();for (Medicine medicine : allMedicine) {log.info(medicine.toString());}}
}

在這里插入圖片描述

🟢點擊 方法前面的 啟動 按鈕,執行單元測試,控制臺效果如下 👇

在這里插入圖片描述


?

九:編寫服務層

?

🟠首先,在 java 目錄 下的 service 包中 創建一個名為 MedicineServiceJava接口,如下 👇

package com.nxu.service;import com.nxu.entity.Medicine;import java.util.List;public interface MedicineService {List<Medicine> getAllMedicine();Medicine getOneMedicine(int id);
}

🟠然后,繼續 在 service 包中創建一個名為 MedicineServiceImplJava類 繼承剛才的接口 👇

package com.nxu.service;import com.nxu.entity.Medicine;
import com.nxu.mapper.MedicineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class MedicineServiceImpl implements MedicineService {@Autowiredprivate MedicineMapper medicineMapper;@Overridepublic List<Medicine> getAllMedicine() {// 此處可以寫更多業務邏輯,這里只是簡單調用return medicineMapper.selectAllMedicine();}@Overridepublic Medicine getOneMedicine(int id) {// 此處可以寫更多業務邏輯,這里只是簡單調用return medicineMapper.selectOneMedicine(id);}
}

在這里插入圖片描述


?

十:編寫控制層

?

🟣在 java目錄 下的 controller 包中,創建一個名為 MedicineController 的 Java類 👇

package com.nxu.controller;import com.nxu.entity.Medicine;
import com.nxu.service.MedicineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;@Controller
public class MedicineController {@Autowiredprivate MedicineService medicineService;@RequestMapping("/")public String index(Model model) {model.addAttribute("msg", "我的第N個SpringBoot項目!");List<Medicine> list = medicineService.getAllMedicine();model.addAttribute("list", list);return "index";}}

在這里插入圖片描述


?

十一:創建頁面

?

🔴在 resources 目錄的 templates 文件下 創建一個名為 indexhtml 文件,然后添加以下代碼 👇

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>藥品管理</title><link href="//unpkg.com/layui@2.10.3/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<h1 th:text="${msg}" style="text-align: center;"></h1><table class="layui-table"><thead><tr><th>序號</th><th>藥品編號</th><th>藥品名稱</th><th>國藥準字</th><th>藥品成分</th><th>藥品規格</th><th>用法用量</th><th>藥品照片</th><th>生產廠家</th><th>庫存數量</th></tr></thead><tbody><!--此處演示Thymeleaf的循環,sb是單個數據體的名字,it是迭代器的別名,${medicines}是我們存的集合--><tr th:each="sb,it : ${medicines}"><td th:text="${it.index+1}"></td><td th:utext="|編號${sb.id}|"></td><td th:text="${sb.name}"></td><td th:text="${sb.code}"></td><td th:text="${sb.compose}"></td><td th:text="${sb.specs}"></td><td th:text="${sb.usage}"></td><td><img th:src="${sb.image}" width="30px" height="30px" alt=""></td><td th:text="${sb.origin}"></td><td>[[${sb.count}]]</td></tr></tbody>
</table><script src="//unpkg.com/layui@2.10.3/dist/layui.js"></script>
</body>
</html>

🔴啟動項目

在這里插入圖片描述

在這里插入圖片描述

🔴打開瀏覽器,輸入 localhost:8080,回車,即可看到我們的index頁面,以及使用Thymeleaf顯示的數據。

在這里插入圖片描述

🔴像圖片這些靜態資源,一般放在 resources 目錄下的 static 文件夾中,頁面中通過 / 路徑 的方式引用 👇

在這里插入圖片描述

🔴那么在引用 該 照片時的路徑就是 /image/samil.jpg


?

十二:返回JSON數據

?

🟢如果我們寫了一個前后端分離項目,或者本身我需要返回JSON格式的數據,那么我們可以這么寫 👇

🟡在原來的 MedicineController 中添加以下代碼:

    @GetMapping("/medicine/{id}")@ResponseBodypublic Medicine getMedicine(@PathVariable Integer id) {return medicineService.getOneMedicine(id);}

在這里插入圖片描述

🟢重啟項目,然后瀏覽器中輸入 localhost:8080/medicine/1 然后回車,可以看到返回的數據 👇

在這里插入圖片描述

🟢如果你的某個 controller 僅作為數據接口,不返回視圖,可以直接用 @RestController ,這個注解相當于 @Controller@ResponseBody 注解的組合,這樣當前整個 controller 中都跳過 Spring 的視圖解析器。


?

至此,關于 SpringBoot 的簡單使用就介紹完了。想要了解更多知識或交個朋友,歡迎訪問 👉 作者博客 😁😁😁

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75344.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch索引的字段映射

目錄 type String類型 text和keyword的區別 數值類型 日期類型 index doc_values fields analyzer store index_options ElasticSearch索引映射示例 Elasticsearch中的字段設置直接影響數據的存儲、索引和查詢行為。結合索引查詢場景合理設置mapping信息可以起到提…

【已解決】實際參數列表和形式參數列表長度不同、java: 無法將類xxx中的構造器xxx應用到給定類型| lombok相關

idea運行maven項目時&#xff0c;報錯這個&#xff08;如標題&#xff09; 解決方案記錄&#xff1a; 找到了之前的、能運行成功不報錯的 maven項目。參考其pom.xml文件中lombok相關部分&#xff0c;將<path>標簽下的lombok加個版本號&#xff0c;就運行成功了&#xff1…

4. 學習網站:學習新的技能或培養興趣愛好

文章目錄 前言英文網站&#xff1a;培養興趣愛好的應用總結 前言 學習網站以及具體提供的內容。 英文網站&#xff1a; Coursera&#xff1a;提供來自全球頂尖大學和機構的在線課程&#xff0c;涵蓋廣泛的學科&#xff0c;包括編程、數據科學、商業和藝術等。Udemy&#xff1…

LabVIEW 開發中 TCP 與 UDP 協議的差異

在 LabVIEW 開發的網絡通信場景中&#xff0c;TCP 和 UDP 是常用的兩種傳輸層協議&#xff0c;它們各自具有獨特的特點&#xff0c;適用于不同的應用需求。理解它們之間的差異&#xff0c;有助于開發者根據具體項目需求選擇合適的協議&#xff0c;以實現高效、穩定的網絡通信。…

04-深入解析 Spring 事務管理原理及源碼

深入解析 Spring 事務管理原理及源碼 Spring 事務管理&#xff08;Transaction Management&#xff09;是企業級應用開發中至關重要的功能之一&#xff0c;它確保數據操作的 原子性、一致性、隔離性、持久性&#xff08;ACID&#xff09;。 本篇博客將從 Spring 事務的基本概…

【Linux】用戶向硬件寄存器寫入值過程理解

思考一下&#xff0c;當我們咋用戶態向寄存器寫入一個值&#xff0c;這個過程是怎么樣的呢&#xff1f;以下是應用程序通過標準庫函數&#xff08;如 write()、ioctl() 或 mmap()&#xff09;向硬件寄存器寫入值的詳細過程&#xff0c;從用戶空間到內核再到硬件的完整流程&…

自動駕駛02:點云預處理——02(運動補償篇LIO-SAM)

當激光雷達&#xff08;LiDAR&#xff09;在運動中采集點云時&#xff0c;每個點的時間戳不同&#xff0c;而車輛在移動&#xff0c;導致點云在不同時間點的坐標與實際情況不符&#xff0c;這種現象稱為運動畸變&#xff08;Motion Distortion&#xff09;。為了得到無畸變的點…

基礎算法篇(3)(藍橋杯常考點)—圖論

前言 這期是基礎算法篇的第三節&#xff0c;其中的dijkstra算法更是藍橋杯中的高頻考點 圖的基本相關概念 有向圖和無向圖 自環和重邊 稠密圖和稀疏圖 對于不帶權的圖&#xff0c;一條路徑的路徑長度是指該路徑上各邊權值的總和 對于帶權的圖&#xff0c;一條路徑長度時指該路…

Crawl4AI:專為AI設計的開源網頁爬蟲工具,釋放大語言模型的潛能

在當今數據驅動的AI時代,高效獲取結構化網頁數據是模型訓練和應用落地的關鍵。Crawl4AI作為一款專為大型語言模型(LLMs)設計的開源爬蟲工具,憑借其極速性能、AI友好輸出和模塊化設計,正在成為開發者社區的熱門選擇。本文將深入解析其核心特性與技術優勢。 一、Crawl4AI的核…

前后端數據序列化:從數組到字符串的旅程(附優化指南)

&#x1f310; 前后端數據序列化&#xff1a;從數組到字符串的旅程&#xff08;附優化指南&#xff09; &#x1f4dc; 背景&#xff1a;為何需要序列化&#xff1f; 在前后端分離架構中&#xff0c;復雜數據類型&#xff08;如數組、對象&#xff09;的傳輸常需序列化為字符…

匯編學習之《移位指令》

這章節學習前需要回顧之前的標志寄存器的內容&#xff1a; 匯編學習之《標志寄存器》 算數移位指令 SAL (Shift Arithmetic Left)算數移位指令 : 左移一次&#xff0c;最低位用0補位&#xff0c;最高位放入EFL標志寄存器的CF位&#xff08;進位標志&#xff09; OllyDbg查看…

NLP高頻面試題(二十九)——大模型解碼常見參數解析

在大語言模型的實際應用中&#xff0c;如何更有效地控制文本生成的質量與多樣性&#xff0c;一直是熱門研究話題。其中&#xff0c;模型解碼&#xff08;decode&#xff09;策略至關重要&#xff0c;涉及的主要參數包括 top_k、top_p 和 temperature 等。本文將詳細介紹這些常見…

【C#】Task 線程停止

CancellationTokenSource cts 是用于控制任務&#xff08;線程&#xff09;停止運行的。我們一步步來解釋它的作用。 &#x1f50d; 現在的代碼結構大概是這樣的&#xff1a; Task.Run(() > {while (true){// 不斷循環采集圖像} });這種寫法雖然簡單&#xff0c;但最大的問…

WebRTC的ICE之TURN協議的交互流程中繼轉發Relay媒體數據的turnserver的測試

WebRTC的ICE之TURN協議的交互流程和中繼轉發Relay媒體數據的turnserver的測試 WebRTC的ICE之TURN協議的交互流程中繼轉發Relay媒體數據的turnserver的測試 WebRTC的ICE之TURN協議的交互流程和中繼轉發Relay媒體數據的turnserver的測試前言一、TURN協議1、連接Turn Server 流程①…

Redis + Caffeine多級緩存電商場景深度解析

Redis Caffeine多級緩存 Redis Caffeine多級緩存電商場景深度解析一、實施目的二、具體實施2.1 架構設計2.2 組件配置2.3 核心代碼實現 三、實施效果3.1 性能指標對比3.2 業務指標改善3.3 系統穩定性 四、關鍵策略4.1 緩存預熱4.2 一致性保障4.3 監控配置Prometheus監控指標 …

前端開發3D-基于three.js

基于 three.js 渲染任何畫面&#xff0c;都要基于這 3 個要素來實現 1場景scene&#xff1a;放置物體的容器 2攝像機&#xff1a;類似人眼&#xff0c;可調整位置&#xff0c;角度等信息&#xff0c;展示不同畫面 3渲染器&#xff1a;接收場景和攝像機對象&#xff0c;計算在瀏…

代碼隨想錄算法訓練營--打卡day4

一.移除鏈表元素 1.題目鏈接 203. 移除鏈表元素 - 力扣&#xff08;LeetCode&#xff09; 2.思路 通過 while 循環來遍歷鏈表&#xff0c;只要 cur 的下一個節點不為空&#xff0c;就繼續循環。在循環中&#xff0c;對 cur 的下一個節點的值進行判斷&#xff1a; 值不等于…

虛擬電廠:多元能源聚合,開啟綠色電力新時代

虛擬電廠&#xff1a;多元能源聚合&#xff0c;開啟綠色電力新時代 在“雙碳”目標驅動下&#xff0c;電力系統正經歷從集中式向分布式、從單一能源向多能互補的深刻變革。 作為能源互聯網的核心載體&#xff0c;虛擬電廠通過數字化技術整合多種能源資源&#xff0c;而是像指…

高通Android10 鈴聲通話音頻80%音量修改

先修改最高的音量step --- a/SC60_AP/frameworks/base/services/core/java/com/android/server/audio/AudioService.javab/SC60_AP/frameworks/base/services/core/java/com/android/server/audio/AudioService.java-311,14 311,14 public class AudioService extends IAudio…

類加載過程?類隔離了解過嗎?

類加載過程詳解 類加載是 JVM 將類的字節碼從磁盤、網絡或其他來源加載到內存&#xff0c;并轉換為 Class 對象的過程&#xff0c;主要分為以下 五個階段&#xff1a; 1. 加載&#xff08;Loading&#xff09; 任務&#xff1a;查找類的二進制字節流&#xff08;如 .class 文…