MyBatisMyBatis plus

整合 MyBatis 到 Spring 或 Spring Boot 項目中,可以極大地簡化開發流程,尤其是當使用 Spring Boot 時,它提供了自動配置功能,使得集成更加簡便。


在 Spring Boot 中整合 MyBatis

1. 添加依賴

首先,在 pom.xml 文件中添加必要的依賴項。對于 Spring Boot 項目,你可以使用 spring-boot-starter-mybatis

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 請根據需要調整版本 -->
</dependency><!-- 數據庫驅動 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>

2. 配置數據源

application.ymlapplication.properties 文件中配置數據庫連接信息:

spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTCusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/*.xml # XML 映射文件的位置type-aliases-package: com.example.demo.model # 實體類所在的包

3. 創建實體類和 Mapper 接口

假設我們有一個用戶表 users,我們需要創建對應的實體類和 Mapper 接口。

User.java

package com.example.demo.model;public class User {private Long id;private String name;private Integer age;// Getters and Setters...
}

UserMapper.java

package com.example.demo.mapper;import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;@Mapper // 標記這是一個 MyBatis 的 Mapper 接口
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User findById(@Param("id") Long id);@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")void insert(User user);
}

4. 使用 Mapper

在服務層或控制器中注入并使用 UserMapper

UserService.java

package com.example.demo.service;import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.findById(id);}public void createUser(User user) {userMapper.insert(user);}
}

5. 運行應用程序

確保你的數據庫已經準備好,并且與配置中的數據庫名稱、用戶名和密碼相匹配。然后運行 Spring Boot 應用程序,嘗試調用服務方法來驗證是否能夠正常工作。


在傳統 Spring 項目中整合 MyBatis

如果你正在使用傳統的 Spring 項目而非 Spring Boot,則需要手動進行更多的配置。

1. 添加依賴

pom.xml 文件中添加 MyBatis 和 Spring 的相關依賴:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>

2. 配置 SqlSessionFactoryBean

在 Spring 配置文件中配置 SqlSessionFactoryBean

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.example.mapper.UserMapper"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

3. 編寫 Mapper XML 文件

src/main/resources/mapper/ 目錄下創建 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="findById" parameterType="long" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><insert id="insert" parameterType="com.example.model.User">INSERT INTO users(name, age) VALUES(#{name}, #{age})</insert>
</mapper>

4. 注入并使用 Mapper

在服務層或其他地方通過 Spring 注解或 XML 配置注入并使用 Mapper。


無論是 Spring Boot 還是傳統的 Spring 項目,MyBatis 提供了靈活的接口和配置選項來滿足不同的需求。Spring Boot 由于其自動配置特性,通常會使集成過程更為簡潔快速。希望這些示例能幫助你更好地理解和實施 MyBatis 與 Spring/Spring Boot 的整合。

MyBatis-Plus 簡介

MyBatis-Plus 是 MyBatis 的增強工具,旨在簡化開發、提高效率的同時不損失靈活性。它在 MyBatis 的基礎上只做增強而不做改變,為簡化開發工作、提高效率而生。下面將詳細介紹 MyBatis-Plus 的核心功能、使用方法以及與 Spring Boot 的整合。


核心特性

  1. 無侵入:引入 MyBatis-Plus 不會對現有的 MyBatis 結構造成任何影響。
  2. 低損耗:啟動即會自動注入基本 CURD,性能幾乎無損耗,直接面向對象操作。
  3. 通用 CRUD:內置通用 Mapper、通用 Service,僅需簡單配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求。
  4. 多種主鍵策略:支持多達 7 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題。
  5. 支持 Lambda 形式調用:通過 Lambda 表達式,方便地編寫查詢條件,無需擔心字段名寫錯。
  6. 內置分頁插件:基于 MyBatis 物理分頁,開發者無需關心具體操作。
  7. 代碼生成器:支持根據數據庫表結構自動生成實體類、Mapper、Service、Controller 等相關代碼,減少重復勞動。
  8. 自定義全局通用操作:支持通用接口注入,可以在不修改原有代碼的情況下擴展功能。

快速入門

1. 添加依賴

pom.xml 文件中添加 MyBatis-Plus 的依賴:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> <!-- 請根據需要調整版本 -->
</dependency>

2. 配置數據源

application.yml 中配置數據源信息:

spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:mapper-locations: classpath:/mapper/*.xmltype-aliases-package: com.your.package.model

3. 創建實體類和 Mapper 接口

假設有一個用戶表 users,我們可以創建對應的實體類和繼承了 BaseMapper 的 Mapper 接口。

User.java

package com.example.model;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("users")
public class User {@TableIdprivate Long id;private String name;private Integer age;// Getters and Setters...
}

UserMapper.java

package com.example.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {// 繼承 BaseMapper 后已經包含了基本的 CRUD 方法,無需額外定義
}

4. 使用 Mapper

在服務層或控制器中注入并使用 UserMapper

UserService.java

package com.example.service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.springframework.stereotype.Service;@Service
public class UserService extends ServiceImpl<UserMapper, User> {// 直接繼承 ServiceImpl 即可獲得基礎的 CRUD 能力
}

5. 測試

可以通過編寫測試用例來驗證是否能夠正常進行數據庫操作:

@Autowired
private UserService userService;@Test
void testCRUD() {// 新增User user = new User();user.setName("John");user.setAge(25);userService.save(user);// 查詢User retrievedUser = userService.getById(user.getId());System.out.println(retrievedUser.getName());// 更新retrievedUser.setAge(26);userService.updateById(retrievedUser);// 刪除userService.removeById(user.getId());
}

高級功能

條件構造器(Wrapper)

MyBatis-Plus 提供了強大的條件構造器 QueryWrapperUpdateWrapper,可以用來構建復雜的查詢和更新條件。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").gt("age", 20);
List<User> userList = userService.list(queryWrapper);

分頁插件

MyBatis-Plus 內置了分頁插件,使用起來非常方便。

Page<User> page = new Page<>(currentPage, pageSize);
IPage<User> userPage = userService.page(page, queryWrapper);
System.out.println("總記錄數:" + userPage.getTotal());
System.out.println("當前頁數據:" + userPage.getRecords());

自動填充功能

對于創建時間、更新時間等字段,可以使用自動填充功能來避免手動設置。

首先,在實體類中使用注解指定填充策略:

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

然后,創建一個處理器類實現 MetaObjectHandler 接口,并重寫相應的方法:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}
}

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

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

相關文章

Stable Diffusion 實戰-手機壁紙制作 第二篇:優化那些“崩臉”和“馬賽克”問題,讓圖像更加完美!

歡迎回來!在《StableDiffusion實戰-手機壁紙制作》系列的第一篇中,我們成功完成了基礎操作,制作出了令人炫目的手機壁紙。 今天,我們將進入一個更高階的領域——優化處理。因為誰不想讓生成的藝術品更完美呢?尤其是避免“崩臉”和“馬賽克”這種讓人抓狂的問題! 創作的路…

408第一季 - 數據結構 - B樹與B+樹

B樹 性質 可以看見一個節點可以有多個數字了 然后也滿足左小右大的特征 然后所有的葉子節點都在同一層&#xff0c;然后2個數字的節點就可以有3個分支 然后呢&#xff0c;每個節點里面到底有幾個數字是有規定的公式的 就這個公式&#xff0c;m是5階的&#xff0c;算出來是2和…

SSRF5 Gopher 協議對內網 Web 服務進行 sql 注入 GET 類型和POST類型

實驗環境&#xff1b; Centos7.6上同時安裝sqli-lib和pikachu 一.Gopher 協議對內網 Web 服務進行 sql 注入 GET 類型 我們先訪問sqli-lib第1關 然后我們構造URL&#xff1a; http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlhttp://192.168.112.12/sql…

Python打卡DAY31

DAY31&#xff1a;文件的規范拆分和寫法 恩師浙大疏錦行 知識點&#xff1a; 規范的文件命名規范的文件夾管理機器學習項目的拆分編碼格式和類型注解 一、機器學習項目流程&#xff1a; 1、數據加載&#xff1a;從文件、數據庫、API 等獲取原始數據。 - 命名參考&#xff1a;…

字符串大數 -減法

描述 以字符串的形式讀入兩個數字&#xff0c;編寫一個函數計算它們的和&#xff0c;以字符串形式返回。 代碼實現 大小判斷&#xff1a;a - b 與 b - a 的絕對值相等將大的數放前面&#xff0c;抽離出結果的符號 import random s, t str(random.randint(1000, 9999)), s…

android google tts如何不聯網內部預置多國語音包

在內置Google GMS服務的設備中&#xff0c;可以正常使用TTS&#xff0c;并且可以聯網下載多國的語音包。然而&#xff0c;對于未通過GMS認證&#xff0c;只能使用基礎的TTS英語播報&#xff0c;而且聯網后是無法下載語音包的&#xff0c;會提示需要google service。本文基于以上…

Java 全棧開發學習:從后端基石到前端靈動的成長之路

目錄 一、開篇&#xff1a;與 Java 全棧的初遇 二、后端學習&#xff1a;SpringBoot 構建穩健基石 &#xff08;一&#xff09;SpringBoot3 入門&#xff1a;簡約而不簡單的啟程 &#xff08;二&#xff09;Spring Boot Web 應用開發&#xff1a;構建交互橋梁 &#xff08;…

AquaCrop模型源代碼分析、模型優化與敏感性分析、未來氣候變化影響分析

AquaCrop是由世界糧食及農業組織&#xff08;FAO&#xff09;開發的一個先進模型&#xff0c;旨在研究和優化農作物的水分生產效率。這個模型在全球范圍內被廣泛應用于農業水管理&#xff0c;特別是在制定農作物灌溉計劃和應對水資源限制方面顯示出其強大的實用性。AquaCrop 不…

開源模型應用落地-讓AI更懂你的每一次交互-mem0-QDrant-Streamlit(一)

一、前言 在人工智能迅猛發展的今天,大型語言模型(LLM)已經成為各行各業的重要工具。然而,盡管這些模型在生成文本、理解語義等方面表現出色,但它們仍然面臨一個關鍵挑戰——缺乏持久的記憶能力。傳統的對話系統往往只能基于當前對話輪次進行回應,無法有效保留和利用歷史…

RPC - Response模塊

Requestor 類是一個請求-響應管理器&#xff0c;負責發送請求并處理響應&#xff0c;支持三種交互模式&#xff1a;同步、異步和回調。它跟蹤所有發出的請求&#xff0c;當響應到達時將其匹配到對應的請求并進行處理。 newDescribe 函數解析 newDescribe 函數負責創建和注冊一…

超高速10G采集卡

超高速10G采集卡是一款高端14位數據采集平臺&#xff0c;旨在滿足最具挑戰性的測量環境。 特性: 單通道和雙通道操作 單通道10GSPS或雙通道5GSPS 7 GByte/s持續數據傳輸速率開放式FPGA支持實時DSP 脈沖檢測固件選項波形平均固件選項 特征 單通道和雙通道工作模式雙通道5G…

One-Hot、BOW、TF-IDF、N-Gram區別

1. One-Hot Encoding (獨熱編碼) 核心思想&#xff1a; 為語料庫&#xff08;所有文檔的集合&#xff09;中的每個唯一單詞創建一個維度。對于一個特定的單詞&#xff0c;在其對應的維度上標記為1&#xff0c;在所有其他維度上標記為0。 表示&#xff1a; 一個非常長的二進制向…

產品經理如何做用戶調研和訪談

用戶調研和訪談是產品經理挖掘用戶需求、優化產品設計的核心環節。在一個完整的產品流程里面&#xff0c;用戶調研和訪談是非常重要的。 當年史玉柱推出腦白金時&#xff0c;就曾帶領團隊在江蘇很多城市進行了大量的走訪&#xff08;用戶調研&#xff09;&#xff0c;和一幫老…

【python 讀取抖音/小紅書/微博今日頭條/百度熱點等平臺的熱點新聞】

輕松獲取全網熱點&#xff0c;Python助你掌握實時輿情 在信息爆炸的時代&#xff0c;抖音、小紅書、微博、今日頭條和百度熱點等平臺每天都會產生海量熱門內容。無論是品牌營銷、競品分析還是輿情監控&#xff0c;掌握這些熱點新聞至關重要。利用Python的強大爬蟲技術&#xff…

【1.3 MySQL知識庫 - 輕松理解版】

&#x1f680; MySQL知識庫 - 輕松理解版 一、MySQL核心知識順口溜 &#x1f3b5; &#x1f3a4; 經典記憶口訣 MySQL數據庫&#xff0c;InnoDB引擎強 ACID事務特性&#xff0c;隔離級別四檔 索引加速查詢&#xff0c;B樹是主梁 主從復制備份&#xff0c;讀寫分離扛 鎖機制防…

計算機網絡期末速成 網絡層 判斷及單選題

判斷題 路由器和鏈路層交換機都被稱為分組交換機。路由器與鏈路層交換機間的根本區別是:路由器在網絡層存儲轉發IP數據報&#xff0c;鏈路層交換機在鏈路層存儲轉發幀。 A. 對 B. 錯 答案: 對 解析: 路由器和鏈路層交換機確實都是分組交換機&#xff0c;但工作層次不同。路由器…

代理 AI 時代的隱私重構:從邊界控制到信任博弈

過去&#xff0c;我們將隱私等同于邊界與權限控制&#xff0c;依賴墻壁、鎖和規則構筑防線。而如今&#xff0c;隨著代理 AI 深度介入生活&#xff0c;成為能感知、決策的自主實體&#xff0c;它不僅處理數據&#xff0c;更在重塑我們的數字形象與內在認知。在此背景下&#xf…

C++實現手寫strstr函數

strstr 函數用于在主字符串中查找子字符串的首次出現位置,以下是高效的實現方案: KMP算法優化版本 #include <iostream> #include <string> #include <vector> using namespace std; // 計算KMP算法的部分匹配表(PMT) vector<int> getNext(const…

Linux操作系統網絡服務模塊一SSH帶外管理概述

前言&#xff1a; 在復雜的網絡運維環境中&#xff0c;?SSH帶外管理&#xff08;Out-of-Band Management&#xff09;?? 是確保系統高可用性的核心技術手段。區別于依賴業務網絡的“帶內管理”&#xff0c;帶外管理通過獨立物理通道?&#xff08;如專用管理網口或串…

org.springframework.cloud.gateway 組件解釋

org.springframework.cloud.gateway 是 Spring Cloud 生態系統中的一個新一代的、功能強大的 API 網關。 1. 什么是 API 網關 (API Gateway)&#xff1f; 在講解 Spring Cloud Gateway 之前&#xff0c;我們先要理解它扮演的角色——API 網關。 在一個微服務架構中&#xff0…