Java學習第十五部分——MyBatis

目錄

一.概述

二.特點

三.組件

四.Mapper?

五.配置文件

六.使用步驟

七.高級功能

八.優點缺點

九.項目實戰

1.打開idea創建一個Java項目,構建系統選“Maven”?

2.創建完成后若依賴報錯,可通過下載或重新加載來解決?

3.配置pom.xml文件,為其添加合適版本的依賴,第二張圖是小編本人的pom.xml文件,僅供參考

4.(可選)打開“文件”——“設置”,按下圖調整設置?

5.連接數據庫,輸入賬戶密碼,注意密碼一定要輸對

6.按下列步驟創建包和文件,xml文件只需要在創建文件時后綴名加“.xml”即可創建,總計六個文件五個包

7.src/main/java/com/example/mabatis目錄下面的三個Java文件內容如下

8.兩個xml文件內容如下(上面是UserMapper.xml對應內容,下面是mybatis-config.xml對應內容)(記得在password處輸入數據庫密碼)

9.Test類代碼如下

10.編譯運行Test類代碼,大功告成!?

11.如何使用

12.對于數據庫


一.概述

? ? ? ?MyBatis 是一個優秀的 Java 持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects)映射成數據庫中的記錄。

二.特點


- **SQL 寫在 XML 里,便于統一管理,解耦,可重用**
- **SQL 和 Java 代碼分離,提高了可維護性**
- **提供 XML 標簽,支持編寫動態 SQL**
- **支持存儲過程調用**
- **支持高級映射(一對多、多對一等)**
- **支持延遲加載和緩存**

三.組件


- **SqlSessionFactory**:是 MyBatis 的核心,負責創建 SqlSession 對象。
- **SqlSession**:是執行命令、獲取映射器和管理事務的。
- **Mapper**:是 MyBatis 的映射器,通過 XML 或注解定義 SQL 語句和 Java 對象的映射關系。
- **MyBatis 配置文件**:定義了 MyBatis 的運行環境,包括數據庫連接信息、事務管理、映射器等。

四.Mapper?


? ? ? ?Mapper 文件定義了 SQL 語句和 Java 對象的映射關系。以下是一個簡單示例:

<?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="selectUserById" parameterType="int" resultType="com.example.model.User">
? ? ? ? SELECT * FROM users WHERE id = #{id}
? ? </select>
? ? <insert id="insertUser" parameterType="com.example.model.User">
? ? ? ? INSERT INTO users (name, age) VALUES (#{name}, #{age})
? ? </insert>
</mapper>

五.配置文件


? ? ? ?MyBatis 的配置文件主要包括以下內容:
- **數據庫連接信息**
- **事務管理**
- **環境配置**
- **映射器配置**

? ? ? ? 一個簡單的 MyBatis 配置文件示例:

<?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>
? ? <environments default="development">
? ? ? ? <environment id="development">
? ? ? ? ? ? <transactionManager type="JDBC"/>
? ? ? ? ? ? <dataSource type="POOLED">
? ? ? ? ? ? ? ? <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
? ? ? ? ? ? ? ? <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
? ? ? ? ? ? ? ? <property name="username" value="root"/>
? ? ? ? ? ? ? ? <property name="password" value="password"/>
? ? ? ? ? ? </dataSource>
? ? ? ? </environment>
? ? </environments>
? ? <mappers>
? ? ? ? <mapper resource="com/example/mapper/UserMapper.xml"/>
? ? </mappers>
</configuration>

六.使用步驟


1. **添加 MyBatis 依賴**
? ?在 Maven 項目中,可以在 `pom.xml` 文件中添加以下依賴:

? ?<dependency>
? ? ? ?<groupId>org.mybatis</groupId>
? ? ? ?<artifactId>mybatis</artifactId>
? ? ? ?<version>3.5.13</version>
? ?</dependency>

2. **創建 MyBatis 配置文件**
? ?如上所述,配置數據庫連接信息、事務管理等。
3. **創建 Mapper 接口和 Mapper 文件**
? ?定義接口和對應的 XML 文件,編寫 SQL 語句。
4. **創建 SqlSessionFactory**

? ?String resource = "mybatis-config.xml";
? ?InputStream inputStream = Resources.getResourceAsStream(resource);
? ?SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

5. **使用 SqlSession 執行操作**

? ?try (SqlSession session = sqlSessionFactory.openSession()) {
? ? ? ?UserMapper userMapper = session.getMapper(UserMapper.class);
? ? ? ?User user = userMapper.selectUserById(1);
? ? ? ?System.out.println(user.getName());
? ?}
?

七.高級功能


- **動態 SQL**
? MyBatis 支持通過 `<if>`、`<choose>`、`<when>`、`<otherwise>` 等標簽編寫動態 SQL。
- **緩存**
? MyBatis 提供一級緩存(SqlSession 級別)和二級緩存(Mapper 級別)。
- **延遲加載**
? MyBatis 支持延遲加載,可以在需要時才加載關聯對象。
- **插件**
? MyBatis 支持插件機制,可以自定義插件來攔截和處理 MyBatis 的執行過程。

八.優點缺點


- **優點**
? - **靈活性高**:可以編寫原生 SQL,支持動態 SQL。
? - **性能好**:通過緩存和延遲加載優化性能。
? - **解耦**:將 SQL 和 Java 代碼分離。
- **缺點**
? - **SQL 編寫工作量大**:需要手動編寫 SQL 和映射文件。
? - **數據庫依賴性高**:SQL 語句與數據庫緊密耦合。

九.項目實戰

1.打開idea創建一個Java項目,構建系統選“Maven”

2.創建完成后若依賴報錯,可通過下載或重新加載來解決

3.配置pom.xml文件,為其添加合適版本的依賴,第二張圖是小編本人的pom.xml文件,僅供參考

        <!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL JDBC 驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
<?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>org.example</groupId><artifactId>mybatis-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>24</maven.compiler.source><maven.compiler.target>24</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!-- MySQL JDBC 驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</project>

4.(可選)打開“文件”——“設置”,按下圖調整設置

5.連接數據庫,輸入賬戶密碼,注意密碼一定要輸對

6.在數據庫中輸入以下代碼并運行

CREATE DATABASE mybatis_demo;USE mybatis_demo;CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,age INT,email VARCHAR(100)
);

7.運行成功結果如下

6.按下列步驟創建包和文件,xml文件只需要在創建文件時后綴名加“.xml”即可創建,總計六個文件五個包

  1. src/main/java 目錄下創建包 com.example.mybatis.model,并在其中創建 User.java 類。

  2. src/main/java 目錄下創建包 com.example.mybatis.mapper,并在其中創建 UserMapper.java 接口。

  3. src/main/java 目錄下創建包 com.example.mybatis.service,并在其中創建 UserService.java 類。

  4. src/main/resources 目錄下創建 mybatis-config.xml 文件。

  5. src/main/resources/mapper 目錄下創建 UserMapper.xml 文件。

  6. src/test/java 目錄下創建包 com.example.mybatis.service,并在其中創建 UserServiceTest.java 類。

  7. 創建完成如圖

7.src/main/java/com/example/mabatis目錄下面的三個Java文件內容如下

package com.example.mybatis.model;public class User {private Integer id;private String username;private Integer age;private String email;// Getters and Setterspublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", age=" + age +", email='" + email + '\'' +'}';}
}
package com.example.mybatis.mapper;import com.example.mybatis.model.User;import java.util.List;public interface UserMapper {// 查詢所有用戶List<User> getAllUsers();// 根據 ID 查詢用戶User getUserById(Integer id);// 添加用戶void addUser(User user);// 更新用戶void updateUser(User user);// 刪除用戶void deleteUser(Integer id);
}
package com.example.mybatis.service;import com.example.mybatis.mapper.UserMapper;
import com.example.mybatis.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.Reader;
import java.util.List;public class UserService {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";Reader reader = Resources.getResourceAsReader(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {e.printStackTrace();}}public List<User> getAllUsers() {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);return mapper.getAllUsers();}}public User getUserById(int id) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);return mapper.getUserById(id);}}public void addUser(User user) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.addUser(user);session.commit();}}public void updateUser(User user) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.updateUser(user);session.commit();}}public void deleteUser(int id) {try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);mapper.deleteUser(id);session.commit();}}
}

8.兩個xml文件內容如下(上面是UserMapper.xml對應內容,下面是mybatis-config.xml對應內容)(記得在password處輸入數據庫密碼)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.mapper.UserMapper"><select id="getAllUsers" resultType="com.example.mybatis.model.User">SELECT * FROM user</select><select id="getUserById" parameterType="int" resultType="com.example.mybatis.model.User">SELECT * FROM user WHERE id = #{id}</select><insert id="addUser" parameterType="com.example.mybatis.model.User">INSERT INTO user (username, age, email) VALUES (#{username}, #{age}, #{email})</insert><update id="updateUser" parameterType="com.example.mybatis.model.User">UPDATE user SET username = #{username}, age = #{age}, email = #{email} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id}</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&amp;serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

9.Test類代碼如下

package com.example.mybatis.service;import com.example.mybatis.model.User;
import org.junit.Test;import java.util.List;public class UserServiceTest {private UserService userService = new UserService();@Testpublic void testGetAllUsers() {List<User> users = userService.getAllUsers();for (User user : users) {System.out.println(user);}}@Testpublic void testGetUserById() {User user = userService.getUserById(1);System.out.println(user);}@Testpublic void testAddUser() {User user = new User();user.setUsername("Alice");user.setAge(25);user.setEmail("alice@example.com");userService.addUser(user);}@Testpublic void testUpdateUser() {User user = userService.getUserById(1);user.setUsername("Bob");user.setAge(30);user.setEmail("bob@example.com");userService.updateUser(user);}@Testpublic void testDeleteUser() {userService.deleteUser(1);}
}

10.編譯運行Test類代碼,大功告成!

11.如何使用

  • 在 IDE 中運行 UserServiceTest 類中的各個測試方法,驗證功能是否正常。

  • 每次運行測試方法時,MyBatis 會與數據庫交互,執行相應的 CRUD 操作。(增刪改查)

12.對于數據庫

如果玩壞了Test類,按下列操作重建數據庫即可

DROP DATABASE mybatis_demo;(刪除現有數據庫)

CREATE DATABASE mybatis_demo;(重新創建數據庫)

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

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

相關文章

小企業如何搭建本地私有云服務器,并設置內部網絡地址提供互聯網訪問

在數字化時代&#xff0c;很多普通公司小企業規模的&#xff0c;利用本地小型服務器或計算機搭建私有云服務器&#xff0c;不僅可以提升數據管理效率&#xff0c;還能保障業務數據的安全性和靈活性。以下是為小企業量身定制的私有云服務器搭建指南&#xff0c;及最后附無公網IP…

MySQL 八股文【持續更新ing】

MySQL 八股文【持續更新ing】 文章目錄 MySQL 八股文【持續更新ing】前言一、MySQL的存儲引擎有哪些&#xff1f;他們之間有什么區別&#xff1f;二、MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么區別&#xff1f;1.InnoDB 中的聚簇索引2.InnoDB 中的非聚簇索引 三、MySQL…

每日算法刷題Day42 7.5:leetcode前綴和3道題,用時2h

7. 3026.最大好子數組和(中等,學習) 3026. 最大好子數組和 - 力扣&#xff08;LeetCode&#xff09; 思想 1.給你一個長度為 n 的數組 nums 和一個 正 整數 k 。 如果 nums 的一個子數組中&#xff0c;第一個元素和最后一個元素 差的絕對值恰好 為 k &#xff0c;我們稱這個…

Linux操作系統之文件(四):文件系統(上)

前言&#xff1a; 我們前幾篇文章講了緩沖區與重定向的有關概念&#xff0c;這些設計是linux系統的核心機制&#xff0c;對系統性能、資源管理和用戶操作靈活性有重要意義。 不涉及一些硬件就不可能讓大家清楚地去理解文件系統&#xff0c;所以這篇文章&#xff0c;我將會從計…

java中,stream的filter和list的removeIf篩選速度比較

在 Java 里&#xff0c;Stream 的filter和 List 的removeIf篩選效率要依據具體情形來判斷。 1. 操作本質有別 Stream 的 filter&#xff1a; 它是一種中間操作&#xff0c;不會立刻執行&#xff0c;而是把篩選條件記錄下來。只有遇到終端操作時&#xff0c;才會開始處理元素。…

Python(28)Python循環語句指南:從語法糖到CPython字節碼的底層探秘

目錄 引言一、推導式家族全解析1.1 基礎語法對比1.2 性能對比測試 二、CPython實現揭秘2.1 字節碼層面的秘密2.2 臨時變量機制 三、高級特性實現3.1 嵌套推導式優化3.2 條件表達式處理 四、性能優化指南4.1 內存使用對比4.2 執行時間優化技巧 五、最佳實踐建議六、總結&#x1…

深度分析:Microsoft .NET Framework System.Random 的 C++ 復刻實現

深度分析&#xff1a;Microsoft .NET Framework Random 的 C 復刻實現 核心原理與算法結構 本實現基于 Knuth 減隨機數生成器&#xff08;Subtractive Random Number Generator&#xff09;&#xff0c;是 .NET Framework 中 System.Random 的精確復刻。其核心特點包括&#x…

[論文閱讀] 人工智能 | 在非CUDA硬件上運行幾何學習:基于Intel Gaudi-v2 HPU的PyTorch框架移植實踐

在非CUDA硬件上運行幾何學習&#xff1a;基于Intel Gaudi-v2 HPU的PyTorch框架移植實踐 論文標題&#xff1a;PyTorch-based Geometric Learning with Non-CUDA Processing Units: Experiences from Intel Gaudi-v2 HPUs arXiv:2507.01031 (cross-list from cs.LG) PyTorch-ba…

Python-多線程-threading

1 需求 2 接口 3 示例 4 參考資料 Python treading 模塊 | 菜鳥教程

2025年- H91-Lc199-- 62.不同路徑(多維動態規劃)--Java版

1.題目描述 2.思路 dp含義&#xff1a;代表到當前位置的路徑數 遞推公式&#xff1a;dp[i][j]dp[i-1][j]dp[i][j-1] dp數組初始化&#xff0c;我們要確保第一行和第一列是有值的. dp數組的遍歷順序&#xff1a;我們需要從左往右遍歷&#xff0c;從上往下遍歷。并且把第一行和第…

char 不是 Java 中的 2 字節(16 位)嗎? 為什么用 UTF-8 編碼寫入時,一個中文要占 3 個字節?

char 不是 Java 中的 2 字節&#xff08;16 位&#xff09;嗎&#xff1f; 為什么用 UTF-8 編碼寫入時&#xff0c;一個中文要占 3 個字節&#xff1f; ? 一、Java 中的 char 是什么&#xff1f; Java 的 char 是一個 固定大小的 2 字節&#xff08;16 位&#xff09;類型&am…

【Elasticsearch】檢索排序 分頁

檢索排序 & 分頁 1.測試數據準備2.排序功能2.1 簡單字段排序2.2 多字段排序2.3 日期排序 3.分頁功能3.1 基礎分頁3.2 深度分頁&#xff08;不推薦大數據量使用&#xff09;3.3 使用 search_after 進行高效分頁 4.綜合示例&#xff1a;高亮排序分頁5.實踐建議 1.測試數據準備…

Delta、Jackknife、Bootstrap

用班級平均身高的案例&#xff0c;展示 ?Delta、Jackknife、Bootstrap? 的完整計算過程。 ?0. 數據準備? ?原始數據&#xff08;4個學生的身高&#xff09;??&#xff1a; 真實均值&#xff08;目標統計量&#xff09;??&#xff1a; ?1. Delta 方法&#xff08;公式…

企業智腦技術架構設計:緊貼企業場景規劃面向未來的發展趨勢與實現路徑

摘要 本文深入探討了企業智腦技術架構的設計理念與發展趨勢&#xff0c;分析了當前企業智能化轉型的技術需求與挑戰&#xff0c;提出了一個面向未來的企業智腦技術架構設計方案。文章從底層技術支撐、核心能力構建、應用場景適配、安全合規保障以及未來發展路徑五個維度展開論…

新手向:Python方向講解

從NASA火星任務到TikTok推薦算法&#xff0c;從自動化腳本到量子計算&#xff0c;Python用import antigravity重新定義了編程邊界 一、設計哲學&#xff1a;優雅明確的編程禪學 Python之禪&#xff08;import this&#xff09;&#xff1a; 優美勝于丑陋&#xff08;Beautifu…

Chrome谷歌瀏覽器插件ModHeader,修改請求頭,開發神器

文章目錄一、介紹與下載二、使用一、介紹與下載 ModHeader顧名思義就是讓我們可以自定義HTTP請求頭或者是重寫響應頭&#xff0c;包括新增請求頭/響應頭或者覆蓋Chrome瀏覽器設置的請求頭的默認值&#xff0c;同時還可以根據URL Pattern來只對特定網站生效。 有條件的同學可以…

SEW:無監督預訓練在語音識別中的性能-效率權衡

摘要 本文研究了自動語音識別&#xff08;ASR&#xff09;中預訓練模型的性能-效率權衡問題。我們聚焦于 wav2vec 2.0&#xff0c;并形式化了多種影響模型性能和效率的架構設計。基于所有觀察結果&#xff0c;我們提出了 SEW&#xff08;Squeezed and Efficient Wav2vec&#…

linux系統部署express+vue項目

一、準備階段&#xff1a; 1、安裝linux上所需要的環境&#xff1a;npm nodejs nginx pm2 //安裝 npm&#xff08;Node 包管理器&#xff09; sudo apt install npm//判斷是否安裝成功 npm -v//安裝 Node.js&#xff08;可以根據需要選擇版本&#xff09; sudo apt inst…

PixiJS教程(004):點擊事件交互

1.6 事件交互實現要求&#xff1a;點擊寶劍&#xff0c;修改寶劍的顏色。1??實現代碼&#xff1a; // 為精靈添加交互事件 sprite.interactive true; sprite.on(click, () > {// 點擊精靈時&#xff0c;改變精靈的顏色sprite.tint Math.random() * 0xFFFFFF; });說明&am…

創客匠人助力家庭教育IP破局:從0到1打造創始人個人品牌全攻略

一、IP定位&#xff1a;細分賽道的精準錨定與用戶畫像構建 在家庭教育8000億市場規模的競爭中&#xff0c;創始人IP的差異化定位成為破局關鍵。創客匠人通過“標簽化定位”工具&#xff0c;幫助教育者鎖定垂直領域&#xff0c;如親子溝通、青春期教育等細分賽道。以景麗霞老師…