SpringBoot : ch05 整合Mybatis

前言

隨著Java Web應用程序的快速發展,開發人員需要越來越多地關注如何高效地構建可靠的應用程序。Spring Boot作為一種快速開發框架,旨在簡化基于Spring的應用程序的初始搭建和開發過程。而MyBatis作為一種優秀的持久層框架,提供了對數據庫操作的便捷支持。本系列博客將帶領大家深入了解如何將這兩者結合起來,以構建強大的企業級應用程序。

在本篇博客中,我們將首先介紹Spring Boot和MyBatis的基本概念,然后重點討論它們的整合方式及實際應用場景。通過本系列博客的學習,讀者將能夠掌握Spring Boot整合MyBatis的最佳實踐,并能夠將其應用于自己的項目中。

希望本系列博客能夠幫助讀者更加深入地理解Spring Boot和MyBatis,并為實際項目開發提供有力支持。讓我們一起開始這段充滿挑戰和樂趣的學習之旅吧!

本次案例通過實現城市列表的查詢和分頁來介紹整合 Mybatis!

一、前期準備

1、新建項目,結構如下

2、導入依賴
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- mybatis 整合 springboot 的 starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><!-- pagehelper 分頁插件的 starter --><!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.3.1</version><scope>test</scope></dependency>

?這段代碼是關于Spring Boot整合MyBatis所需要的依賴項。通過這些依賴項,我們可以輕松地將Spring Boot和MyBatis集成在一起,實現數據庫操作的快速開發。以下是每個依賴項的作用簡介:

  1. spring-boot-starter-jdbc:Spring Boot提供的JDBC Starter,用于配置和管理數據庫連接。

  2. mybatis-spring-boot-starter:MyBatis與Spring Boot整合的Starter,提供了MyBatis的核心功能和配置。

  3. pagehelper-spring-boot-starter:PageHelper分頁插件的Starter,用于在MyBatis中實現分頁查詢。

  4. mysql-connector-j:MySQL數據庫驅動程序。

  5. lombok:Java庫,簡化代碼的編寫,提供各種注解和工具。

  6. spring-boot-starter-test:Spring Boot的測試模塊,用于編寫單元測試。

  7. mybatis-spring-boot-starter-test:MyBatis與Spring Boot整合的測試模塊,用于編寫對MyBatis功能進行測試的單元測試。

這些依賴項可以通過Maven或Gradle等構建工具進行引入,并在項目中配置相關的屬性和文件,以實現Spring Boot與MyBatis的整合。通過使用這些依賴項,我們可以簡化開發過程,提高開發效率,同時保持良好的代碼結構和可維護性

?3、建一個 city_info 表
create table city_info(city_id int primary key ,city_name varchar(100),city_code varchar(100),province varchar(50)
)
4、新建一個 City 實體類
@Data
public class City {private Integer cityId;private String cityName;private String cityCode;private String province;}

二、配置 application.yml

# 配置數據源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/psmusername: rootpassword: 123456hikari:maximum-pool-size: 200minimum-idle: 10connection-timeout: 3000idle-timeout: 600000connection-test-query: select 1
# mybatis 配置
mybatis:# 實體的別名type-aliases-package: edu.nf.ch05.entity# mapper 映射配置文件的路徑mapper-locations: classpath:/mappers/*.xml# 輸出 sql 語句configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 分頁插件配置
pagehelper:# 設置數據庫的方言helper-dialect: mysql# 啟用注解分頁參數support-methods-arguments: true# 啟用分頁合理化reasonable: true

當配置Spring Boot中的數據源時,針對每個屬性進行詳細介紹:

  1. spring.datasource.driver-class-name:

    • 用于指定數據庫驅動程序的類名。
    • 在示例中,使用的是MySQL數據庫,因此指定了com.mysql.cj.jdbc.Driver
  2. spring.datasource.url:

    • 指定數據庫的連接地址。
    • 在示例中,使用的是本地的MySQL數據庫,連接地址為jdbc:mysql://localhost:3306/psm,其中localhost代表數據庫所在的主機名,3306代表數據庫的端口號,psm是數據庫的名稱。
  3. spring.datasource.usernamespring.datasource.password:

    • 分別指定數據庫的用戶名和密碼。
    • 在示例中,用戶名為root,密碼為123456
  4. spring.datasource.hikari.maximum-pool-size:

    • 指定Hikari連接池的最大連接數。
    • 在示例中,最大連接數被設置為200。
  5. spring.datasource.hikari.minimum-idle:

    • 指定Hikari連接池的最小空閑連接數。
    • 在示例中,最小空閑連接數被設置為10。
  6. spring.datasource.hikari.connection-timeout:

    • 指定連接超時時間,單位為毫秒。
    • 在示例中,連接超時時間被設置為3000毫秒。
  7. spring.datasource.hikari.idle-timeout:

    • 指定連接在連接池中空閑的最長時間,單位為毫秒。
    • 在示例中,空閑連接的最長時間被設置為600000毫秒(10分鐘)。
  8. spring.datasource.hikari.connection-test-query:

    • 指定用于測試連接是否可用的查詢語句。
    • 在示例中,使用了select 1作為測試查詢語句。
  9. mybatis.type-aliases-package:

    • 指定實體類的別名包路徑。
    • 在示例中,實體類別名被設置為edu.nf.ch05.entity,即該包下的實體類可以直接使用類名作為別名。
  10. mybatis.mapper-locations:

    • 指定Mapper映射文件的位置。
    • 在示例中,Mapper映射文件被設置在classpath:/mappers/*.xml路徑下,表示在類路徑下的mappers目錄中尋找XML格式的Mapper文件。
  11. mybatis.configuration.log-impl:

    • 指定MyBatis的日志輸出方式。
    • 在示例中,日志輸出方式被設置為org.apache.ibatis.logging.stdout.StdOutImpl,即將日志輸出到控制臺。
  12. pagehelper.helper-dialect:

    • 指定PageHelper分頁插件支持的數據庫方言。
    • 在示例中,使用的是MySQL數據庫,因此數據庫方言被設置為mysql
  13. pagehelper.support-methods-arguments:

    • 啟用或禁用PageHelper分頁插件的注解分頁參數功能。
    • 在示例中,該屬性被設置為true,表示啟用注解分頁參數。
  14. pagehelper.reasonable:

    • 啟用或禁用PageHelper分頁插件的分頁合理化功能。
    • 在示例中,該屬性被設置為true,表示啟用分頁合理化。

以上是示例配置中各個屬性的詳細介紹。根據實際需求,可以根據數據庫類型、連接池配置以及MyBatis和PageHelper的功能需求進行相應的調整和配置。

配置完數據源和mybatis以及分頁插件后,我們就可以去完成dao的編寫以及serviced的代碼了。?

?

三、編寫 dao

public interface CityDao {List<City> listCity(@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);}

編寫 Mybatis 配置類,映射sql語句:

<?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="edu.nf.ch05.dao.CityDao"><resultMap id="cityMap" type="city"><id property="cityId" column="city_id"/><result property="cityName" column="city_name"/><result property="cityCode" column="city_code"/><result property="province" column="province"/></resultMap><select id="listCity" resultMap="cityMap">select city_id, city_name, city_code, province from psm.city_info</select></mapper>

?

四、編寫 service

public interface CityService {/*** 查詢城市列表* @param pageNum* @param pageSize* @return*/PageInfo<City> listCity(Integer pageNum,Integer pageSize);}

實現類

@Service
@Transactional(rollbackFor = RuntimeException.class)
@RequiredArgsConstructor
public class CityServiceImpl implements CityService {private final CityDao dao;@Overridepublic PageInfo<City> listCity(Integer pageNum, Integer pageSize) {List<City> cities = dao.listCity(pageNum, pageSize);return new PageInfo<>(cities);}
}

讓我解釋一下其中的一些關鍵點:

  1. @Service注解:

    • 用于將該類標識為Spring的Service組件,通常用于業務邏輯的處理。
  2. @Transactional(rollbackFor = RuntimeException.class)注解:

    • 用于聲明事務行為,指定在發生RuntimeException時進行事務回滾。
    • 這意味著當方法中拋出RuntimeException異常時,事務會回滾到方法執行前的狀態。
  3. @RequiredArgsConstructor注解:

    • Lombok提供的注解,用于生成一個包含必需參數的構造函數。
    • 在這里,它會為CityServiceImpl類生成一個包含final字段dao的構造函數。
  4. private final CityDao dao;

    • 使用@RequiredArgsConstructor注解后,Lombok會自動生成帶有CityDao類型參數的構造函數,并且會將CityDao對象注入到dao字段中。
    • 這也意味著CityDaoCityServiceImpl的一個依賴項,在構造函數中通過依賴注入的方式進行初始化。
  5. @Override注解:

    • 用于標識該方法是對接口中的方法的重寫實現。
  6. public PageInfo<City> listCity(Integer pageNum, Integer pageSize)方法:

    • 該方法是CityService接口中定義的方法的實現。
    • 通過調用CityDaolistCity方法獲取城市列表數據,然后通過PageInfo類對其進行封裝并返回。

?

五、在?Ch05Application 添加掃描注解

@SpringBootApplication
@MapperScan("edu.nf.ch05.dao")
public class Ch05Application {public static void main(String[] args) {SpringApplication.run(Ch05Application.class, args);}}

注意:這是重點,就算寫完了之前的所有代碼,沒有使用這個注解去掃描,前面的都是白寫,如果不使用掃描,會報錯。

@MapperScan("edu.nf.ch05.dao") 是一個注解,用于掃描指定包下的Mapper接口,并將其注冊為Spring的Bean。在整合Spring Boot和MyBatis時,我們需要告訴Spring Boot去掃描哪些包下的Mapper接口,并將其注入到容器中。

在這個例子中,注解@MapperScan("edu.nf.ch05.dao")表示對包edu.nf.ch05.dao進行掃描,該包下的所有Mapper接口將被注冊為Spring的Bean,以便在其他地方可以通過自動注入的方式使用它們。

這是個類就相當于我們之前所寫的配置類一樣。

六、測試

@Slf4j
@SpringBootTest
class Ch05ApplicationTests {@Autowiredprivate CityService cityService;@Testvoid contextLoads() {PageInfo<City> cityPageInfo = cityService.listCity(0, 10);cityPageInfo.getList().forEach(list -> log.info(list.toString()));}}

?把 cityService 通過字段注入進來,就可以從容器中獲取我們的listCity方法。

運行結果:

?

七、總結

大家對比一下和之前使用 springMvc 整合 Mybatis 是不是有很大的區別,區別是什么,就是不用再配置類中編寫大量的配置代碼了,springboot幫我們簡化了這個配置過程,我們只需要在properties或者yml中使用簡單的配置即可以配置好Mybatis來使用。?

?

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

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

相關文章

【Linux】-進程間通信-共享內存(SystemV),詳解接口函數以及原理(使用管道處理同步互斥機制)

&#x1f496;作者&#xff1a;小樹苗渴望變成參天大樹&#x1f388; &#x1f389;作者宣言&#xff1a;認真寫好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee? &#x1f49e;作者專欄&#xff1a;C語言,數據結構初階,Linux,C 動態規劃算法&#x1f384; 如 果 你 …

中低壓MOSFET 2N7002T 60V 300mA 雙N通道 采用SOT-523封裝形式

2N7002KW小電流雙N通道MOSFET&#xff0c;電壓60V電流300mA&#xff0c;采用SOT-523封裝形式。低Ros (on)的高密度單元設計&#xff0c;堅固可靠&#xff0c;具有高飽和電流能力&#xff0c;ESD防護門HBM2KV。可應用于直流/直流轉換器&#xff0c;電池開關等產品應用上。

Redis JDBC

1、導入依賴&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.4.3</version></dependency> 2、連接JDBC public class JedisDemo05 {public static void main(String[]…

成為AI產品經理——AI產品經理工作全流程

一、業務背景 背景&#xff1a;日常排球訓練&#xff0c;中考排球項目和排球體測項目耗費大量人力成本和時間成本。 目標&#xff1a;開發一套用于實時檢測排球運動并進行排球墊球計數和姿勢分析的軟件。 二、產品工作流程 我們這里對于產品工作流程的關鍵部分進行講解&…

「Docker」如何在蘋果電腦上構建簡單的Go云原生程序「MacOS」

介紹 使用Docker開發Golang云原生應用程序&#xff0c;使用Golang服務和Redis服務 注&#xff1a;寫得很詳細 為方便我的朋友可以看懂 環境部署 確保已經安裝Go、docker等基礎配置 官網下載鏈接直達&#xff1a;Docker官網下載 Go官網下載 操作步驟 第一步 創建一個…

Java 多線程之 DCL(Double-Checked Locking)

文章目錄 一、概述二、使用方法 一、概述 DCL&#xff08;Double-Checked Locking&#xff09;是一種用于在多線程環境下實現延遲初始化的技術。它結合了懶加載&#xff08;Lazy Initialization&#xff09;和線程安全性&#xff0c;用于在需要時創建單例對象或共享資源。它的…

什么是SEO?(初學者建議收藏)

前言 在這個充滿機遇和挑戰的時代&#xff0c;人們不斷追求著更好的生活和更高的成就。無論是個人還是企業&#xff0c;都需要不斷提升自己的競爭力&#xff0c;才能在激烈的市場競爭中獲得成功。因此&#xff0c;我們需要不斷學習和成長&#xff0c;學會適應變化和面對挑戰。…

汽車智能座艙/智能駕駛SOC -2

第二篇&#xff08;筆記&#xff09;。 未來智能汽車電子電氣將會是集中式架構&#xff08;車載數據中心&#xff09;虛擬化技術&#xff08;提供車載數據中心靈活性和安全性&#xff09;這個幾乎是毋庸置疑的了。國際大廠也否紛紛布局超算芯片和車載數據中心平臺。但是演進需…

日期格式轉化成星期幾部署到linux顯示英文

異常收集 原因&#xff1a;解決辦法仰天大笑出門去&#xff0c;我輩豈是蓬蒿人 傳入一個時間獲取這個時間對應的是星期幾&#xff0c;在開發環境&#xff08;window系統&#xff09;中顯示為星期幾&#xff0c;部署到服務器&#xff08;linux系統&#xff09;中會顯示英文的時間…

serverless開發實戰

.yml格式 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一種人類可讀的數據序列化格式&#xff0c;它使用簡潔的結構和縮進來表示數據。它被廣泛用于配置文件和數據交換的場景&#xff0c;具有易讀性和易寫性的特點。 serverless.yml配置 在項目的根目錄下增加…

Youtube新手運營——你需要的技巧與工具

對于有跨境意向的內容創作者或者品牌企業來說&#xff0c;YouTube是因其巨大的潛在受眾群和商業價值成為最值得投入變現與營銷計劃的平臺。 據統計&#xff0c;98% 的美國人每月訪問 YouTube&#xff0c;近三分之二的人每天訪問。但是&#xff0c;YouTube還遠未達到過度飽和的…

Leetcode—53.最大子數組和【中等】

2023每日刷題&#xff08;三十四&#xff09; Leetcode—53.最大子數組和 前綴和算法思想 參考靈茶山艾府 實現代碼 #define MAX(a, b) ((a > b) ? (a) : (b)) #define MIN(a, b) ((a < b) ? (a) : (b)) int maxSubArray(int* nums, int numsSize) {int ans INT_…

VMware 16 Pro 安裝以及下載

1、下載地址&#xff1a; https://www.aliyundrive.com/s/nj3PSD4TN9G 2、安裝文件 右擊打開 下一步 密鑰&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 到此&#xff0c;安裝完畢

postgreSQL如何快速查詢大表數據量

文章目錄 場景方案結果 場景 我有一個非常大的表&#xff0c;估計幾百萬或者幾千萬。 我開始使用了 select count(*) from my_table_javapub 方式&#xff0c;查詢非常慢。 如何解決&#xff1f;&#xff1f;&#xff1f; 方案 如果你需要更快地獲取表中的行數&#xff0c…

93.STL-系統內置仿函數

目錄 算術仿函數 關系仿函數 邏輯仿函數 C 標準庫中提供了一些內置的函數對象&#xff0c;也稱為仿函數&#xff0c;它們通常位于 <functional> 頭文件中。以下是一些常見的系統內置仿函數&#xff1a; 算術仿函數 功能描述&#xff1a; 實現四則運算其中negate是一元…

Java游戲之飛翔的小鳥

前言 飛翔的小鳥 小游戲 可以作為 java入門階段的收尾作品 &#xff1b; 需要掌握 面向對象的使用以及了解 多線程&#xff0c;IO流&#xff0c;異常處理&#xff0c;一些java基礎等相關知識。一 、游戲分析 1. 分析游戲邏輯 &#xff08;1&#xff09;先讓窗口顯示出來&#x…

騰訊待辦導出的文件在哪找?支持打開ics文件的提醒待辦工具

您使用過騰訊待辦嗎&#xff1f;如果您在平常使用的提醒待辦工具為騰訊待辦&#xff0c;想必近期您打開這款提醒待辦工具時會看到提示您及時導出數據的提示。騰訊旗下的騰訊待辦應用&#xff0c;應業務發展方向調整將于2023年12月20日全面停止運營并下架該應用。 面對突如其來…

Redis的主從復制及哨兵模式

一、Redis的主從復制 1.1 Redis主從復制定義 主從復制是redis實現高可用的基礎&#xff0c;哨兵模式和集群都是在主從復制的基礎之上實現高可用&#xff1b; 主從復制實現數據的多級備份&#xff0c;以及讀寫分離(主服務器負責寫&#xff0c;從服務器只能讀) 1.2 主從復制流…

ChatGPT 也并非萬能,品牌如何搭上 AIGC「快班車」

內容即產品的時代&#xff0c;所見即所得&#xff0c;所得甚至超越所見。 無論是在公域的電商平臺、社交媒體&#xff0c;還是品牌私域的官網、社群、小程序&#xff0c;品牌如果想與用戶發生連接&#xff0c;內容永遠是最前置的第一要素。 01 當內容被消費過&#xff0c;就…