2024最新搭建Mybatis配置教程【超詳細】

為什么要學習mybatis

首先要弄清楚什么是mybatis?我們為什么要學mybatis

學習MyBatis可以幫助開發人員更高效地進行數據庫操作,提高開發效率,并且可以使得應用程序更具可維護性和性能優勢。

我們知道Java程序操作數據庫是通過jdbc與數據庫進行交互,那么說明mybatis有傳統jdbc所沒有的優勢。

傳統jdbc方式

// 1. 加載配置文件
Properties pro=new Properties();
pro.load(new FileReader("resource/jdbc.properties"));
// 2. 獲取配置文件中連接數據庫的信息
String url=pro.getProperty("url");
String user=pro.getProperty("user");
String password=pro.getProperty("password");
String driver=pro.getProperty("driver");
// 3. 加載數據庫的驅動
Class.forName(driver);
// 4. 創建數據庫的連接
Connection conn = DriverManager.getConnection(url, user, password);// 5. sql 語句
String sql = "select * from s_admin where username=? and password=?";
// 3. 創建執行sql的對象
ps = conn.prepareStatement(sql);
// 4. 給 ?賦值
ps.setString(1, username);
ps.setString(2, password);
// 5. 執行sql
ResultSet rs = ps.executeQuery();
// 6. 如果查詢出數據,則返回該條數據
if (rs.next()) {Admin admin = new Admin();admin.setUsername(rs.getString("username"));admin.setPassword(rs.getString("password"));return admin;
// 7. 否則返回空
} else {return null;
}

我們可以看出來通過傳統jdbc方式連接數據庫比較繁瑣,需要加載配置文件、獲取配置文件信息、加載數據庫驅動、創建數據庫連接等一系列操作,還可能導致SQL查詢代碼混合在JAVA代碼中導致代碼冗長,開發的效率降低,同時也帶來了維護上的一些問題。在實際的項目中SQL語句的變化可能很大,一旦發生變化就要修改JAVA代碼,系統需要重新編譯,不方便維護。如果映射為Java對象會比較方便。

這也是我們為什么要學習Mybatis的原因

Mybatis簡介

Mybatis的開發文檔地址:https://mybatis.net.cn/
首先我們要知道什么是Mybatis?Mybatis原是Apache的一個開源項目ibatis,2010年遷移到Google code改名為Mybatis,2013年遷移到GitHub上。
MyBatis 是一款優秀的持久層框架,支持定制化 SQL、存儲過程以及高級映射。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

Mybatis解決的問題

  1. 解決數據庫驅動的問題
  2. 創建JDBC中必須使用的Connection,Statement,Result對象
  3. 從xml中獲取SQL,并執行SQL語句,把ResultSet結果轉化為Java對象
  4. 關閉資源

如何使用Mybatis

下載Mybatis:https://github.com/mybatis/mybatis-3/releases
準備階段:

數據庫環境搭建

我這里使用的是Navicat管理工具,下載地址:https://www.navicat.com.cn/download/direct-download
image.png
創建數據庫和表

CREATE TABLE `user` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名',`sex` varchar(1) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '性別',`age` int DEFAULT NULL COMMENT '年齡',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

image.png
創建Java項目
image.png
注意這里的GroupID填寫你的域名,作為組的唯一標識。
等待Maven依賴文件下載完成。在設置中可以看到Maven的版本,我這里是3.9.5
image.png
可以在這個網站上搜索Maven所支持mybatis的版本https://mvnrepository.com/

添加所需依賴

復制依賴文件到pom.xml文件中

<dependencies><!--  junit 測試  --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--  mysql驅動  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!--  mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency>
</dependencies>

如果出現了像我這樣的報錯,重構Maven,換到安全版本即可。
image.png
image.png

配置核心文件

創建mybatis-config.xml文件,存放位置在src/main/resources目錄下
image.png
核心文件內容,在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="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

復制內容到mybatis-config.xml中
image.png
我們需要修改的是紅色圈里面的內容
下面我簡單解釋一下

  • <?xml version="1.0" encoding="UTF-8" ?>:指定了XML的版本和編碼
  • ](http://mybatis.org/dtd/mybatis-3-config.dtd">):指定了XML的結構,引用了 MyBatis 的配置文件的 DTD 文件
  • :指定了事務管理器的類型為 JDBC,表示使用 JDBC 進行事務管理。
  • :指定了數據源的類型為 POOLED,表示使用連接池來管理數據庫連接。
  • :設置數據庫驅動的名稱,${driver} 是一個占位符,通常在實際應用中會被具體的數據庫驅動名稱替換。
  • :設置數據庫的 URL 地址,${url} 是一個占位符,通常在實際應用中會被具體的數據庫 URL 地址替換。
  • :設置連接數據庫的用戶名,${username} 是一個占位符,通常在實際應用中會被具體的用戶名替換。
  • :設置連接數據庫的密碼,${password} 是一個占位符,通常在實際應用中會被具體的密碼替換。
  • :指定了映射器的資源,這里是一個 XML 文件的路徑,表示 MyBatis 將加載該路徑下的 BlogMapper.xml 文件作為映射器。

在這里我先不填寫映射文件的位置
image.png

創建實體User類

創建一個User類
image.png
image.png
完成創建
image.png
注意:我們的字段名要和我們的屬性名要保持一致。
image.png
添加對應的有參構造函數、無參構造函數、獲取器、設置器、toSring()

創建Mapper接口

首先,什么是Mapper接口?

在 MyBatis 中,Mapper 接口是用于定義數據庫操作的接口。Mapper 接口中的方法定義了對數據庫的增刪改查操作,而具體的 SQL 語句則是通過注解或者 XML 文件來進行配置和映射。

通常情況下,一個 Mapper 接口對應一個數據模型(如一個數據庫表),它包含了針對該數據模型的各種操作方法。這些方法的名稱和參數類型通常與具體的 SQL 語句相對應,使得調用者能夠直觀地理解該方法所執行的操作。

MyBatis 提供了多種方式來配置 Mapper 接口和 SQL 語句的映射關系,包括注解方式和 XML 文件方式。通過這些配置,MyBatis 能夠將接口方法與對應的 SQL 語句關聯起來,從而實現數據庫操作的執行。

MyBatis相當于原來的DAO,區別是Mapper僅僅是接口,不需要提供實現類

在Java文件夾下創建cn.niutr.mybatis.mapper.UserMapper接口
image.png
我們為什么要創建這個接口?
Mybatis中有面向接口編程的功能,當我們調用接口中的方法時會自動匹配一個SQL語句并執行。

創建Mybatis的映射文件

我們知道Mybatis是一個ORM(Object Relational Mapping,對象 - 關系映射)框架。

  • Object:Java實體類對象
  • Relational:關系型數據庫
  • Mapping:二者之間的對應關系
Java概念數據庫概念
屬性字段/列
對象記錄/行

1、映射文件的命名規則: 表所對應的實體類的類名+Mapper.xml
例如:表user,映射的實體類為User,所對應的映射文件為UserMapper.xml
因此一個映射文件對應一個實體類,對應一張表的操作 MyBatis映射文件用于編寫SQL,訪問以及操作表中的數據 MyBatis映射文件存放的位置是src/main/resources/mappers目錄下

我們在resources文件夾下創建一個mappers文件夾用來存儲我們的映射文件,同時創建一個映射文件

<?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="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

映射文件在官方文檔中也可以找到
復制映射文件到UserMapper.xml下
image.png
同時我們還要修改上面的內容,這里我簡單解釋一下:

  • :定義了一個 Mapper(映射器)元素,指定了命名空間為 “org.mybatis.example.BlogMapper”,這個命名空間通常與 Java 中的 Mapper 接口對應。

我們需要改的地方:
假如我們要執行一個插入操作,我們需要再UserMapper接口中添加對應的方法
image.png
同時我們還需要在XML中創建映射關系

2、MyBatis中可以面向接口操作數據,要保證兩個一致:
① mapper接口的全類名和映射文件的命名空間(namespace)保持一致
② mapper接口中方法的方法名和映射文件中編寫SQL的標簽的id屬性保持一致

image.png
表–實體類–mapper接口–映射文件
注意還要修改映射器資源位置
image.png
經過一些列操作之后,我們的Mybatis就已經配置完成了

通過Junit測試功能

首先我們要在test文件夾下的java目錄創建一個MybatisTest類用于測試
image.png
接下來我們要創建一個測試方法

//讀取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//創建SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
//通過核心配置文件所對應的字節輸入流創建工廠類SqlSessionFactory,生產SqlSession對象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//創建SqlSession對象,此時通過SqlSession對象所操作的sql都必須手動提交或回滾事務
//SqlSession sqlSession = sqlSessionFactory.openSession();
//創建SqlSession對象,此時通過SqlSession對象所操作的sql都會自動提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通過代理模式創建UserMapper接口的代理實現類對象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//調用UserMapper接口中的方法,就可以根據UserMapper的全類名匹配元素文件,通過調用的方法名匹配
映射文件中的SQL標簽,并執行標簽中的SQL語句
int result = userMapper.insertUser();
sqlSession.commit();
System.out.println("結果:"+result);

創建結果如下:
image.png
插入成功!
image.png

加入log4j日志功能

添加所需依賴

添加依賴到pom.xml中,開發文檔

<!--log4j-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.23.0</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.0</version>
</dependency>

加入所需配置文件

log4j2的配置文件名為log4j2.properties,存放的位置是src/main/resources目錄下

# log4j2.properties# Set to debug or trace if log4j initialization is failing
status = warn# Name of the configuration
name = ConsoleLogConfigDemo# Console appender configuration
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# Root logger level
rootLogger.level = debug# Root logger referring to console appender
rootLogger.appenderRef.stdout.ref = consoleLogger

結果如下
image.png

MyBatis的增刪改查

添加

<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','男',23)
</insert>

刪除

<!--int deleteUser();-->
<delete id="deleteUser">
delete from user where id = 18
</delete>

修改

<!--int updateUser();-->
<update id="updateUser">
update user set name='yxc' where id = 18
</update>

查詢一個實體類對象

<!--User getUserById();-->
<select id="getUserById" resultType="cn.niutr.mybatis.pojo.User">
select * from user where id = 22
</select>

查詢所有用戶信息

<select id="getAllUser" resultType="cn.niutr.mybatis.pojo.User">select * from user
</select>

如下測試文件

@Test
public void testCRUD() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);UserMapper mapper = sqlSession.getMapper(UserMapper.class);//int result = mapper.UpdateUser();//int result = mapper.deleteUser();//        User user = mapper.getUserById();//        System.out.println(user);List<User> allUser = mapper.getAllUser();for (User user : allUser) {System.out.println(user);}
}

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

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

相關文章

藍橋杯——矩形拼接

矩形拼接 題目分析 對于一個矩形而言&#xff0c;我可以把它橫著放&#xff0c;而可以把它豎著放&#xff0c;比如下圖&#xff0c; 3個矩形的拼接情況可以通過在紙上畫圖模擬出來&#xff0c;情況有以下三種 ? 圖1 圖3是4條邊&#xff0c;即四邊形。觀察一下什么時候會是四…

IO(Linux)

文件系統 前言1. 回顧關于C文件部分函數2. 一些文件知識的共識3. 相對路徑4. fwrite中的\0 一、文件描述符fd1. 概念2. 系統調用① open 和 close② write③ read 和 lseek 3. 缺省打開的fd 二、重定向1. 原理2. 系統調用dup23. stdout和stderr的區別4. 進程替換和原來進程文件…

【計算機考研】408學到什么程度才能考130?

408考130要比考研數學考130難的多 我想大部分考過408的考生都是這么認為的。408的難點在于他涉及的范圍太廣了&#xff0c;首先如果你要備考408&#xff0c;你要準備四門課程&#xff0c;分別是數據結構&#xff0c;計算機組成原理&#xff0c;操作系統和計算機網絡。 這四門…

kafka學習筆記四(面試題)

[Kafka 常見面試題]如何保證消息的不重復不丟失-阿里云開發者社區 (aliyun.com) 18道kafka高頻面試題哪些你還不會&#xff1f;&#xff08;含答案和思維導圖&#xff09;-阿里云開發者社區 (aliyun.com) Leader Epoch機制解決的是數據丟失或不一致的問題&#xff0c;見下文&…

報錯解決:av.codec.codec.UnknownCodecError: libx264

1. 錯誤信息 今天在使用Pytorch.io和PyAV包的時候出現了這個錯誤&#xff0c;完整的錯誤信息如下所示&#xff1a; ...envs\tf2_py38\lib\site-packages\torchvision\io\video.py", line 92, in write_videostream container.add_stream(video_codec, ratefps)File &qu…

企業計算機服務器中了360勒索病毒如何解密,360后綴勒索病毒處理流程

對于眾多的企業來說&#xff0c;企業的數據是企業發展的核心&#xff0c;越來越多的企業開始注重企業的數據安全問題&#xff0c;但隨著網絡技術的不斷發展與應用&#xff0c;網絡黑客的攻擊加密手段也在不斷升級。近期&#xff0c;云天數據恢復中心接到多家企業的求助&#xf…

設計模式—命令模式:探索【命令模式】的奧秘與應用實踐!

命令模式 命令模式是一種行為設計模式&#xff0c;它的主要目的是將請求封裝成一個對象&#xff0c;從而使得請求的發送者和接收者之間進行解耦。 在命令模式中&#xff0c;命令被封裝為一個對象&#xff0c;包含了需要執行的操作以及執行這些操作所需的所有參數。 命令的發送者…

【藍橋杯】2023省賽真題詳解(更新中)

&#x1f40f;小憐憐的簡介&#xff1a; &#x1f496;博客主頁&#xff1a;浣熊小憐憐 &#x1f680;年齡&#xff1a;23 大三在讀 &#x1f4aa;愛好&#xff1a;干飯&#xff0c;運動&#xff0c;碼代碼&#xff0c;看書&#xff0c;音樂 &#x1f389;歡迎關注&#x1f50d…

Vue3 v-for循環獲取不到圖片路徑問題

解決辦法 <span>{{item.title}}</span> 通過本地靜態文件獲取img的地址即可展示圖片 url:"/src/assets/comImgs/txt1.png",

OpenGuass 之 where 1 = 0 處理流程代碼走讀

一. 前言 在OpenGuass中&#xff0c;如果where 條件中包含where 1 0 等固定為否條件的查詢語句&#xff0c;在生成執行計劃的時候&#xff0c;執行計劃是BaseResult類型&#xff0c;此類型的執行計劃不會進行物理數據掃描&#xff0c;如下所示&#xff1a; 對于非固定為否條件&…

【論文閱讀】多傳感器SLAM數據集

一、M2DGR 該數據集主要針對的是地面機器人&#xff0c;文章正文提到&#xff0c;現在許多機器人在進行定位時&#xff0c;其視角以及移動速度與車或者無人機有著較大的差異&#xff0c;這一差異導致在地面機器人完成SLAM任務時并不能直接套用類似的數據集。針對這一問題該團隊…

latex中\documentclass[preprint,review,12pt]{elsarticle}的詳細解釋

在LaTeX中&#xff0c;\documentclass 是一個命令&#xff0c;用于指定文檔所使用的文檔類。文檔類定義了文檔的總體結構、格式和樣式。elsarticle 是一個常用的文檔類&#xff0c;它主要用于在Elsevier出版的期刊上提交論文。 詳細解釋 \documentclass[preprint,review,12pt…

Autosar Appl介紹

AUTOSAR架構中的應用層 AUTOSAR 應用層構成AUTOSAR 架構中的最頂層,被認為對所有車輛應用至關重要。AUTOSAR 標準使用“組件”概念指定應用層實現。 在談論應用層實現時,應該考慮的三個最重要的部分是: AUTOSAR 應用軟件組件這些組件的 AUTOSAR 端口AUTOSAR 端口接口 AUTOS…

浙江大學主辦!2024年第7屆信息通信與信號處理國際會議( ICICSP2024)征稿開啟!

會議官網 IEEE | ICICSP 2024 學術會議查詢-學術會議交流服務平臺-愛科會易 (uconf.com)?www.uconf.com/

FreeSWITCH 1.10.10 簡單圖形化界面16 - ubuntu22.04編譯mod_python3時遇到的問題記錄

FreeSWITCH 1.10.10 簡單圖形化界面16 - 編譯mod_python3時遇到的問題 0、 界面預覽1、編譯mod_python3時報錯2、解決參考FreeSWITCH界面安裝參考:https://blog.csdn.net/jia198810/article/details/132479324 0、 界面預覽 http://myfs.f3322.net:8020/ 用戶名:admin,密碼…

OpenChat:性能高達105.7%,第一個超越ChatGPT的開源模型?

OpenChat&#xff1a;性能高達105.7%&#xff0c;第一個超越ChatGPT的開源模型&#xff1f; 前幾天開源模型第一還是是Vicuna-33B、WizardLM&#xff0c;這不又換人了。對于開源模型的風起云涌&#xff0c;大家見怪不怪&#xff0c;不斷更新的LLM榜單似乎也沒那么吸引人了。 …

在springboot項目中調用通義千問api多輪對話并實現流式輸出

官網文檔 阿里靈積提供了詳細的官方文檔 如何實現多輪對話 官方文檔中提到只需要把每輪對話中返回結果添加到消息管理器中&#xff0c;就可以實現多輪對話。本質上就是將歷史對話再次發送給接口。 如何實現流式輸出 官方文檔中提出使用streamCall()方法就可以實現流式輸出&…

ViT的若干細節

之前只看了ViT的大概結構&#xff0c;具體的模型細節和代碼實現知之甚少。隨著ViT逐漸成為CV領域的backbone&#xff0c;有必要重新審視下。 patch -> token 為了將圖片處理成序列格式&#xff0c;很自然地想到將圖片分割成一個個patch&#xff0c;再把patch處理成token。 …

Mysql整理-主從復制

MySQL的主從復制是一種常見的數據復制和分布式數據共享方法。在這種架構中,一個MySQL服務器充當主(master)服務器,而一個或多個其他MySQL服務器充當從(slave)服務器。數據從主服務器復制到從服務器,實現數據的分布和備份。這種設置主要用于數據備份、讀取擴展、災難恢復…

Python系列(20)—— 循環語句

Python中的循環控制語句 一、引言 在Python編程中&#xff0c;循環是重復執行一段代碼直到滿足特定條件的基本結構。Python提供了多種循環控制語句&#xff0c;如For 和While &#xff0c;以及用于控制循環流程的輔助語句&#xff0c;如Break、Continue和Pass。這些語句的組合…