SpringBoot 項目整合 MyBatis 框架,附帶測試示例

文章目錄

    • 一、創建 SpringBoot 項目
    • 二、添加 MyBatis 依賴
    • 三、項目結構和數據庫表結構
    • 四、項目代碼
      • 1、application.yml
      • 2、TestController
      • 3、TbUser
      • 4、TbUserMapper
      • 5、TestServiceImpl
      • 6、TestService
      • 7、TestApplication
      • 8、TbUserMapper.xml
      • 9、MyBatisTest
    • 五、瀏覽器測試結果
    • 六、Junit 測試結果
    • 七、完整 pom.xml 文件

如果對于 MyBatisPlus 的常見基礎知識不了解,可以點擊 MyBatisPlus 基礎原理、常見注解和注意事項簡介

如果有對如何使用 SpringBoot 整合 MyBatisPlus 框架不清楚的,可以點擊 超詳細的SpringBoot項目整合MyBatisPlus框架步驟示例,并附帶瀏覽器和Junit測試結果示例代碼

一、創建 SpringBoot 項目

本文采用 idea 創建簡單的 maven 項目, JDK 版本為1.8。圖上項目名字無所謂,我是使用 MayBatisPlus 那個項目修改過來的。

在這里插入圖片描述

二、添加 MyBatis 依賴

依賴項中的都很重要,包括 MyBatisMySQL 的依賴,還有 SpringBoot 項目的起步依賴,以及對實體類非常有用的 lombok 依賴。MyBatis 和 MyBatisPlus 項目的只是各自的依賴不同,其他都是相同的。

<parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.10</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency>
</dependencies>

三、項目結構和數據庫表結構

該項目整體結構如下:

MyBatis 項目 結構

數據庫表結構如下:

在這里插入圖片描述

四、項目代碼

1、application.yml

本文使用 yml 的配置文件,配置文件中按層級配置好數據庫的信息,項目啟動時,會自動根據配置信息連接到數據庫。注:要保證數據庫是啟動狀態的。

配置文件中 mapper-locations 要注意配置,如果你的文件名是自定義的,很可能會找不到 mapper 文件位置。

spring:datasource:url: jdbc:mysql://10.100.5.174:8306/test?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNulldriver-class-name: com.mysql.jdbc.Driverusername: rootpassword: 各位大佬點點贊mybatis:mapper-locations: classpath:mybatis-mapper/*.xml

2、TestController

這里沒啥好說的,如果不清楚,說明基礎沒有學通。

@RestController
public class TestController {@Autowiredprivate TestService testService;@GetMapping("/select")public TbUser selectById(@Param("id") int id ){return testService.selectById(id);}@GetMapping("/add")public void addTbUser(@Param("id") int id, @Param("username") String username, @Param("password") String password) {TbUser tbUser = new TbUser(id, username, password);testService.addUser(tbUser);}
}

3、TbUser

實體類,一般來說,要與數據庫中的表對應上,這里使用了 @TableName @TableId @TableFieldMyBatisPlus 中的注解進行對應。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TbUser {private int id;private String username;private String password;
}

4、TbUserMapper

這里的代碼是與 mapper.xml 文件相對應的,xml 文件中的 id 就是指的這個接口中的方法名。

@Mapper
public interface TbUserMapper {TbUser selectById(int id);void addUser(TbUser tbUser);
}

5、TestServiceImpl

@Service
public class TestServiceImpl implements TestService {@Autowiredprivate TbUserMapper tbUserMapper;@Overridepublic TbUser selectById(int id) {return tbUserMapper.selectById(id);}@Overridepublic void addUser(TbUser tbUser) {tbUserMapper.addUser(tbUser);}
}

6、TestService

public interface TestService {TbUser selectById(int id);void addUser(TbUser tbUser);
}

7、TestApplication

@MapperScan("com.wen.mapper")
@SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class);}
}

8、TbUserMapper.xml

文件中有兩點要注意:

  • namespace:對應哪一個文件的數據庫表格,要與 TbUserMapper 對應。
  • id 屬性:對應 TbUserMapper 接口中的方法名。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wen.mapper.TbUserMapper"><select id="selectById" resultType="com.wen.dto.TbUser">SELECT username, password FROM tb_user WHERE id = #{id}</select><insert id="addUser" parameterType="com.wen.dto.TbUser">INSERT INTO tb_user VALUES (#{id}, #{username}, #{password})</insert>
</mapper>

9、MyBatisTest

用于 Junit 測試使用,這里要注意,因為需要連接數據庫,所以要先啟動 SpringBoot 項目,所以要添加以下兩個注解。

  • @RunWith(SpringRunner.class)
    • 因為 SpringRunner.class 繼承了 SpringJUnit4ClassRunner.class 且沒有進行任何修改。
    • 所以 @RunWith(SpringRunner.class) 基本等同于 `@RunWith(SpringJUnit4ClassRunner.class)`` 。
    • 作用是讓測試在 Spring 容器環境下執行。
    • 如果測試類中無此注解,將導致 servicedao 等自動注入失敗。
  • @SpringBootTest(classes = TestApplication.class)
    • 確保注解的主類(通常是包含 main 方法的類)在測試類的同一包中或者其子包中。
    • @SpringBootTest 默認會從當前包中查找主類。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class MyBatisTest {@Autowiredprivate TestService testService;@Testpublic void selectTbUser(){TbUser tbUser = testService.selectById(3);System.out.println(tbUser.toString());}@Testpublic void addTbUser(){testService.addUser(new TbUser(4, "wangwu", "6677"));}
}

五、瀏覽器測試結果

啟動 TestApplication ,也就是啟動 SpringBoot 項目,起步依賴會自動識別項目 application.yml 文件中的數據庫配置信息,連接數據庫,根據 controller 中的訪問路徑添加參數,就可以做到對數據庫的增刪改查。


如圖所示,在瀏覽器上訪問 localhost:8080/select?id=2 ,目的是查詢 ID 為 2 的 TbUser 信息。

在這里插入圖片描述


如圖所示,在瀏覽器上訪問 localhost:8080/add?id=3&username=lisi&password=3344 ,目的是添加一條用戶記錄。

在這里插入圖片描述
可以查看數據庫對應信息。

在這里插入圖片描述

六、Junit 測試結果

運行 selectTbUser() 方法,會出現以下結果。對應瀏覽器上查詢方法。

在這里插入圖片描述


運行 addTbUser() 方法,會出現以下結果。對應瀏覽器上查詢方法。

在這里插入圖片描述

可以查看數據庫對應信息。

在這里插入圖片描述

七、完整 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wen</groupId><artifactId>springboot-mybatis</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.10</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency></dependencies>
</project>

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

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

相關文章

JavaScript實現時鐘計時

會動的時鐘 1.目標 2.分析 1.最開始頁面不顯示時間&#xff0c;有兩個按鈕 開始 暫停。開始按鈕是可以點擊的&#xff0c;暫停按鈕不能點擊 2.當點擊開始按鈕后&#xff0c;設置開始按鈕不可用&#xff0c;暫停按鈕可用。然后將當前系統時間放到按鈕上面。每隔1秒中更新一下…

TransMIL:基于Transformer的多實例學習

MIL是弱監督分類問題的有力工具。然而&#xff0c;目前的MIL方法通常基于iid假設&#xff0c;忽略了不同實例之間的相關性。為了解決這個問題&#xff0c;作者提出了一個新的框架&#xff0c;稱為相關性MIL&#xff0c;并提供了收斂性的證明。基于此框架&#xff0c;還設計了一…

3.js - 反射率(reflectivity) 、折射率(ior)

沒啥太大的感覺 反射率 reflectivity 概念 反射率&#xff1a;指的是&#xff0c;材質表面反射光線的能力反射率&#xff0c;用于控制材質對環境光&#xff0c;或光源的反射程度反射率越高&#xff0c;材質表面反射的光線越多&#xff0c;看起來就越光亮使用 適用于&#xff0…

【OCPP】ocpp1.6協議第5.1章節Cancel Reservation的介紹及翻譯

目錄 5.1 取消預約Cancel Reservation-概述 Cancel Reservation CancelReservation.req 請求消息 CancelReservation.conf 確認消息 取消預定的流程 應用場景 示例消息 CancelReservation.req 示例 CancelReservation.conf 示例 總結 5.1 取消預約Cancel Reservation…

VScode 常用插件

基礎開發插件 Chinese (Simplified)&#xff08;簡體中文語言包&#xff09;&#xff1a;這是適用于VS Code的中文&#xff08;簡體&#xff09;語言包&#xff0c;適用于英語不太流利的用戶。Auto Rename Tag&#xff1a;這個插件可以同步修改HTML/XML標簽&#xff0c;當用戶修…

【PYG】Cora數據集分類任務計算損失,cross_entropy為什么不能直接替換成mse_loss

cross_entropy計算誤差方式&#xff0c;輸入向量z為[1,2,3]&#xff0c;預測y為[1]&#xff0c;選擇數為2&#xff0c;計算出一大坨e的式子為3.405&#xff0c;再用-23.405計算得到1.405MSE計算誤差方式&#xff0c;輸入z為[1,2,3]&#xff0c;預測向量應該是[1,0,0]&#xff0…

Dify入門指南

一.Dify介紹 生成式 AI 應用創新引擎&#xff0c;開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力&#xff0c;輕松構建和運營生成式 AI 原生應用&#xff0c;比 LangChain 更易用。一個平臺&#xff0c;接入全球大型語言模型。不同…

CesiumJS【Basic】- #050 繪制掃描線(Primitive方式)

文章目錄 繪制掃描線(Primitive方式)- 需要自定義著色器1 目標2 代碼2.1 main.ts繪制掃描線(Primitive方式)- 需要自定義著色器 1 目標 使用Primitive方式繪制掃描線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(cesiumConta…

自我反思與暑假及大三上學期規劃

又要放暑假了&#xff0c;依稀記得上個暑假一邊練車&#xff0c;一邊試圖拿捏C語言&#xff0c;第一次感覺暑假也可以如此忙碌。但是開學以后&#xff0c;我并沒有把重心放在期望自己應該做的事情上&#xff0c;更多的時間花費在了處理學院的相關事務。現在看來&#xff0c;大二…

《昇思 25 天學習打卡營第 9 天 | FCN 圖像語義分割 》

活動地址&#xff1a;https://xihe.mindspore.cn/events/mindspore-training-camp 簽名&#xff1a;Sam9029 這一章節 出現了一個 深度學習 中經常出現的概念 全卷積網絡&#xff08;Fully Convolutional Networks&#xff09; : 官話&#xff1a;FCN 主要用于圖像分割領域&…

德璞資本:橋水公司如何利用AI實現投資決策的精準提升?

摘要&#xff1a; 在金融科技的浪潮中&#xff0c;橋水公司推出了一只依靠機器學習決策的創新基金&#xff0c;吸引了大量投資者的關注。本文將深入探討該基金的背景、AI技術的應用、對橋水公司轉型的影響&#xff0c;以及未來發展的前景。 新基金背景&#xff1a;橋水公司的創…

2024年7月2日 (周二) 葉子游戲新聞

老板鍵工具來喚去: 它可以為常用程序自定義快捷鍵&#xff0c;實現一鍵喚起、一鍵隱藏的 Windows 工具&#xff0c;并且支持窗口動態綁定快捷鍵&#xff08;無需設置自動實現&#xff09;。 卸載工具 HiBitUninstaller: Windows上的軟件卸載工具 經典名作30周年新篇《恐怖驚魂夜…

MyBatis入門案例

實施前的準備工作&#xff1a; 1.準備數據庫表2.創建一個新的springboot工程&#xff0c;選擇引入對應的起步依賴&#xff08;mybatis、mysql驅動、lombok&#xff09;3.在application.properties文件中引入數據庫連接信息4.創建對應的實體類Emp&#xff08;實體類屬性采用駝峰…

throw 和return的區別,A函數里面執行B函數 B函數異常后 不再執行A函數

function aFun() {try {bFun();console.log(22222222222);} catch (e) {// 如果bFun中拋出異常&#xff0c;中止aFun的執行console.log(e.message);} }function bFun() {let a 1, b 1;if (a b) {throw new Error(Stopped by bFun); // 拋出異常&#xff0c;停止aFun}// bFun…

python3遞歸目錄刪除N天前的文件(帶有日志記錄)

本來想用linux find去處理,為了裝逼,寫了py玩玩,刪除2w個文件總共用了2毫秒。因為這個腳本有記錄刪除時間,你可以看到開始時間和最后刪除的時間。由于只用了2毫秒,把我嚇了一跳以為刪錯文件了!! #!/usr/bin/env python3 # -*- encoding: utf-8 -*-@File : del_N…

補瀏覽器環境

一&#xff0c;導言 // global是node中的關鍵字&#xff08;全局變量&#xff09;&#xff0c;在node中調用其中的元素時&#xff0c;可以直接引用&#xff0c;不用加global前綴&#xff0c;和瀏覽器中的window類似&#xff1b;在瀏覽器中可能會使用window前綴&#xff1a;win…

校園水質信息化監管系統——水質監管物聯網系統

隨著物聯網技術的發展越來越成熟&#xff0c;它不斷地與人們的日常生活和工作深入融合&#xff0c;推動著社會的進步。其中物聯網系統集成在高校實踐課程中可以應用到許多項目&#xff0c;如環境氣象檢測、花卉種植信息化監管、水質信息化監管、校園設施物聯網信息化改造、停車…

C++編程(八)多態

文章目錄 一、多態&#xff08;一&#xff09;概念1. 多態2. 函數重寫3. 虛函數 &#xff08;二&#xff09;實現多態的條件1. 繼承關系2. 父類中寫虛函數3. 在子類中重寫父類的虛函數4.父類的指針或引用指向子類的對象5. 使用示例 &#xff08;三&#xff09;虛析構函數&#…

springboot項目jar包修改數據庫配置運行時異常

一、背景 我將軟件成功打好jar包了&#xff0c;到部署的時候發現jar包中數據庫配置寫的有問題&#xff0c;不想再重新打包了&#xff0c;打算直接修改配置文件&#xff0c;結果修改配置后&#xff0c;再通過java -jar運行時就報錯了。 二、問題描述 本地項目是springBoot項目…

【計算機圖形學 | 基于MFC三維圖形開發】期末考試知識點匯總(上)

文章目錄 視頻教程第一章 計算機圖形學概述計算機圖形學的定義計算機圖形學的應用計算機圖形學 vs 圖像處理 vs模式識別圖形顯示器的發展及工作原理理解三維渲染管線 第二章 基本圖元的掃描轉換掃描轉換直線的掃描轉換DDA算法Bresenham算法中點畫線算法圓的掃描轉換中點畫圓算法…