Spring和Spring Boot集成MyBatis的完整對比示例,包含從項目創建到測試的全流程代碼

以下是Spring和Spring Boot集成MyBatis的完整對比示例,包含從項目創建到測試的全流程代碼:
在這里插入圖片描述


一、Spring集成MyBatis示例

1. 項目結構
spring-mybatis-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.example/
│   │   │       ├── config/
│   │   │       ├── mapper/
│   │   │       ├── service/
│   │   │       └── web/
│   │   └── resources/
│   │       ├── mybatis-config.xml
│   │       ├── applicationContext.xml
│   │       └── mapper/
│   │           └── UserMapper.xml
│   └── test/
│       └── java/
│           └── com.example/
│               └── UserTest.java
├── pom.xml
└── schema.sql
2. Maven依賴(pom.xml)
<!-- Spring核心 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version>
</dependency>
<!-- MyBatis -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version>
</dependency>
<!-- MyBatis-Spring整合 -->
<dependency><groupId>org.mybatis.spring</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>
<!-- 數據庫驅動 -->
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.30</version>
</dependency>
<!-- 測試 -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
3. 數據庫表(schema.sql)
CREATE TABLE user (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,email VARCHAR(255) UNIQUE NOT NULL
);
4. MyBatis全局配置(mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="cacheEnabled" value="true"/></settings>
</configuration>
5. Spring配置(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 數據源 --><bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></bean><!-- MyBatis工廠 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!-- 掃描Mapper接口 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper"/></bean></beans>
6. Mapper接口(UserMapper.java)
package com.example.mapper;import com.example.entity.User;public interface UserMapper {User selectById(Long id); // 對應XML中的SQL
}
7. Mapper XML(UserMapper.xml)
<?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.example.mapper.UserMapper"><select id="selectById" resultType="com.example.entity.User">SELECT * FROM user WHERE id = #{id}</select>
</mapper>
8. Service層(UserService.java)
package com.example.service;import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.entity.User;public class UserService {@Autowiredprivate UserMapper userMapper;public User getUser(Long id) {return userMapper.selectById(id);}
}
9. 測試類(UserTest.java)
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserTest {@Testpublic void testGetUser() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = context.getBean(UserService.class);User user = userService.getUser(1L);System.out.println(user.getName());}
}

二、Spring Boot集成MyBatis示例

1. 項目結構
springboot-mybatis-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.example/
│   │   │       ├── config/
│   │   │       ├── mapper/
│   │   │       ├── service/
│   │   │       └── Application.java
│   │   └── resources/
│   │       ├── application.properties
│   │       └── mapper/
│   │           └── UserMapper.xml
│   └── test/
│       └── java/
│           └── com.example/
│               └── UserTest.java
├── pom.xml
└── schema.sql
2. Maven依賴(pom.xml)
<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- MyBatis Starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- 數據庫驅動 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.30</version></dependency><!-- 測試 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
3. 數據庫表(schema.sql)
// 與Spring示例相同
4. 配置文件(application.properties)
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.entity
5. 啟動類(Application.java)
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication // 自動掃描組件
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
6. Mapper接口(UserMapper.java)
package com.example.mapper;import org.apache.ibatis.annotations.Mapper; // 非必需,但顯式標注
import com.example.entity.User;@Mapper
public interface UserMapper {User selectById(Long id);
}
7. Mapper XML(UserMapper.xml)
// 與Spring示例相同
8. Service層(UserService.java)
package com.example.service;import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.entity.User;@Service // Spring Boot自動掃描組件
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUser(Long id) {return userMapper.selectById(id);}
}
9. 測試類(UserTest.java)
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class UserTest {@Autowiredprivate UserService userService;@Testpublic void testGetUser() {User user = userService.getUser(1L);System.out.println(user.getName());}
}

三、核心差異對比表

特性Spring集成Spring Boot集成
依賴管理需顯式聲明所有依賴(如MyBatis、Spring模塊)通過starter自動引入依賴,減少配置
配置方式XML/Java Config手動配置Bean屬性文件(application.properties)+ 注解
數據源配置手動定義dataSource Bean通過spring.datasource前綴自動配置
Mapper掃描MapperScannerConfigurer配置通過@Mapper注解或mybatis.mapper-locations
啟動方式ClassPathXmlApplicationContext加載配置單一入口類加@SpringBootApplication注解
測試框架需JUnit4和Spring Test支持Spring Boot Test簡化測試配置
環境兼容性兼容傳統Spring應用服務器(如Tomcat)內置嵌入式Tomcat,直接運行JAR
代碼量配置復雜,需定義多個Bean配置簡潔,依賴約定優于配置原則
擴展性手動控制所有配置細節通過@EnableAutoConfiguration禁用自動配置

四、關鍵差異總結

  1. 依賴簡化:Spring Boot通過starter自動管理依賴版本,避免沖突。
  2. 配置自動化:Spring Boot的application.properties替代了大量XML配置,如數據源和Mapper掃描。
  3. 啟動便捷性:Spring Boot通過@SpringBootApplication簡化了應用啟動流程。
  4. 測試效率:Spring Boot的測試框架(如@SpringBootTest)減少了測試代碼的復雜性。
  5. 開發模式:Spring Boot遵循“約定優于配置”,適合快速開發;Spring保留了對復雜場景的完全控制能力。

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

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

相關文章

【數據可視化-24】巧克力銷售數據的多維度可視化分析

?? 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個…

c語言-分支結構

以下是我初學C語言的筆記記錄&#xff0c;歡迎留言補充 一&#xff0c;分支結構分為幾個 兩個&#xff0c;一個是if語句&#xff0c;一個是Switch語句 二&#xff0c;if語句 &#xff08;1&#xff09;結構體 int main() {if()//判斷條件{//表達式}else if()//判斷條件{//表達式…

數據庫MySQL學習——day4(更多查詢操作與更新數據)

文章目錄 1、聚合函數&#xff08;Aggregate Functions&#xff09;2、分組查詢&#xff08;GROUP BY&#xff09;3、更新數據&#xff08;UPDATE&#xff09;4、刪除數據&#xff08;DELETE&#xff09;5、進階練習示例6、 今日小結 1、聚合函數&#xff08;Aggregate Functio…

Spark-SQL 項目

一、項目概述 &#xff08;一&#xff09;實驗目標 統計有效數據條數&#xff1a;篩選出uid、phone、addr三個字段均無空值的記錄并計數。提取用戶數量最多的前 20 個地址&#xff1a;按地址分組統計用戶數&#xff0c;按降序排序后取前 20 名。 &#xff08;二&#xff09;…

Redis的ZSet對象底層原理——跳表

我們來聊聊「跳表&#xff08;Skip List&#xff09;」&#xff0c;這是一個既經典又優雅的數據結構&#xff0c;尤其在 Redis 中非常重要&#xff0c;比如 ZSet&#xff08;有序集合&#xff09;底層就用到了跳表。 &#x1f31f; 跳表&#xff08;Skip List&#xff09;簡介 …

2025深圳中興通訊安卓開發社招面經

2月27號 中興通訊一面 30多分鐘 自我介紹 聊項目 我的優缺點&#xff0c;跟同事相比&#xff0c;有什么突出的地方 Handler機制&#xff0c;如何判斷是哪個消息比較耗時 設計模式&#xff1a;模板模式 線程的狀態 線程的開啟方式 線程池原理 活動的啟動模式 Service和Activity…

【Castle-X機器人】二、智能導覽模塊安裝與調試

持續更新。。。。。。。。。。。。。。。 【Castle-X機器人】智能導覽模塊安裝與調試 二、智能導覽模塊安裝與調試2.1 智能導覽模塊安裝2.2 智能導覽模塊調試2.2.1 紅外測溫傳感器測試2.2.2 2D攝像頭測試 二、智能導覽模塊安裝與調試 2.1 智能導覽模塊安裝 使用相應工具將智能…

深入理解二叉樹遍歷:遞歸與棧的雙重視角

二叉樹的遍歷前序遍歷中序遍歷后續遍歷總結 二叉樹的遍歷 雖然用遞歸的方法遍歷二叉樹實現起來更簡單&#xff0c;但是要想深入理解二叉樹的遍歷&#xff0c;我們還必須要掌握用棧遍歷二叉樹&#xff0c;遞歸其實就是利用了系統棧去遍歷。特此記錄一下如何用雙重視角去看待二叉…

Qt Creator中自定義應用程序的可執行文件圖標

要在Qt Creator中為你的應用程序設置自定義可執行文件圖標&#xff0c;你需要按照以下步驟操作&#xff1a; Windows平臺設置方法 準備圖標文件&#xff1a; 創建一個.ico格式的圖標文件&#xff08;推薦使用256x256像素&#xff0c;包含多種尺寸&#xff09; 可以使用在線工…

Windows11系統中GIT下載

Windows11系統中GIT下載 0、GIT背景介紹0.0 GIT概述0.1 GIT誕生背景0.2 Linus Torvalds 的設計目標0.3 Git 的誕生&#xff08;2005 年&#xff09;0.4 Git 的后續發展0.5 為什么 Git 能成功&#xff1f; 1、資源下載地址1.1 官網資源1.2 站內資源 2、安裝指導3、驗證是否下載完…

react的fiber 用法

在 React 里&#xff0c;Fiber 是 React 16.x 及后續版本采用的協調算法&#xff0c;它把渲染工作分割成多個小任務&#xff0c;讓 React 可以在渲染過程中暫停、恢復和復用任務&#xff0c;以此提升渲染性能與響應能力。在實際開發中&#xff0c;你無需直接操作 Fiber 節點&am…

FPGA前瞻篇-數字電路基礎-邏輯門電路設計

模擬信號&#xff1a; 一條隨時間連續變化、平滑波動的曲線&#xff0c;比如正弦波。 數字信號&#xff1a; 一條只有高低兩個狀態&#xff08;0和1&#xff09;&#xff0c;跳變清晰的方波曲線。 在 IC 或 FPGA 的邏輯設計中&#xff0c;我們通常只能處理數字信號&#xff0…

RabbitMQ 基礎概念(隊列、交換機、路由鍵、綁定鍵、信道、連接、虛擬主機、多租戶)介紹

本文是博主在梳理 RabbitMQ 知識的過程中&#xff0c;將所遇到和可能會遇到的基礎知識記錄下來&#xff0c;用作梳理 RabbitMQ 的整體架構和功能的線索文章&#xff0c;通過查找對應的知識能夠快速的了解對應的知識而解決相應的問題。 文章目錄 一、RabbitMQ 是什么&#xff1f…

機器學習第一篇 線性回歸

數據集&#xff1a;公開的World Happiness Report | Kaggle中的happiness dataset2017. 目標&#xff1a;基于GDP值預測幸福指數。&#xff08;單特征預測&#xff09; 代碼&#xff1a; 文件一&#xff1a;prepare_for_traning.py """用于科學計算的一個庫…

Java面試高頻問題(29-30)

二十九、全鏈路壓測&#xff1a;數據隔離與流量 關鍵技術點 1. 流量染色&#xff1a;通過Header注入X-Test-TraceId標識壓測流量 2. 影子庫表&#xff1a;通過ShardingSphere實現數據隔離 3. 熔斷降級&#xff1a;壓測流量觸發異常時自動切換回生產數據源 數據隔離方案對比 …

Python常用的第三方模塊之數據分析【pdfplumber庫、Numpy庫、Pandas庫、Matplotlib庫】

【pdfplumber庫】從PDF文件中讀取內容 import pdfplumber #打開PDF文件 with pdfplumber.open(DeepSeek從入門到精通(20250204).pdf) as pdf:for i in pdf.pages: #遍歷頁print(i.extract_text()) #extract_text()方法提取內容print(f----------------第{i.page_number}頁結束…

長短板理論——AI與思維模型【83】

一、定義 長短板理論思維模型&#xff0c;也被稱為木桶原理&#xff0c;是指一只木桶能盛多少水&#xff0c;并不取決于最長的那塊木板&#xff0c;而是取決于最短的那塊木板。該理論將木桶視為一個整體系統&#xff0c;各個木板代表著系統的不同組成部分或要素&#xff0c;強…

2025藍橋省賽c++B組第二場題解

前言 這場的題目非常的簡單啊&#xff0c;至于為什么有第二場&#xff0c;因為當時河北正在刮大風被迫停止了QwQ&#xff0c;個人感覺是歷年來最簡單的一場&#xff0c;如果有什么不足之處&#xff0c;還望補充。 試題 A: 密密擺放 【問題描述】 小藍有一個大箱子&#xff0…

【數據結構與算法】從完全二叉樹到堆再到優先隊列

完全二叉樹 CBT 設二叉樹的深度為 h , 若非最底層的其他各層的節點數都達到最大個數 , 最底層 h 的所有節點都連續集中在左側的二叉樹叫做 完全二叉樹 . 特點 對任意節點 , 其右分支下的葉子節點的最底層為 L , 則其左分支下的葉子節點的最低層一定是 L 或 L 1 .完全二叉樹…

Leetcode:1. 兩數之和

題目 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案&#xff0c;并且你不能使用兩次相同的元素。 你可以按任意順序返回答案。 示…