【2023.11.24】Mybatis基本連接語法學習?

基本配置

1.如果使用Maven管理項目,需要在pom.xml中配置依賴。

2.安裝Mybatis-3.5.7.jar包

3.進行XML配置:這里將文件命名為mybatis-config.xml

配置數據庫連接XML文件

<?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="${驅動類(含包名)}"/><property name="url" value="${數據庫連接URL}"/><property name="username" value="${用戶名}"/><property name="password" value="${密碼}"/></dataSource></environment></environments><mappers><mapper url = "file:src/com/test/mapper/TestMapper.xml"/><!--    存放映射器XML文件   --></mappers></configuration>

其中mappers標簽內存放XML映射器文件

編寫Java主函數

package com.test;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.FileInputStream;
import java.io.FileNotFoundException;public class Main {public static void main(String[] args) throws FileNotFoundException {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){System.out.println(sqlSession.selectList("getArtist"));//括號內填寫SQL映射語句的id}}
}

1.從 XML 中構建 SqlSessionFactory

每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為核心的。SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得,創建SqlSessionFactory時會調用xml配置文件。

2.從 SqlSessionFactory 中獲取 SqlSession

我們可以從中獲得 SqlSession 的實例。SqlSession 提供了在數據庫執行 SQL 命令所需的所有方法。

你可以通過 SqlSession 實例來執行已映射的 SQL 語句。SQL語句的映射需要編寫映射器XML文件

編寫映射器(mapper)的XML文件

<?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="src/com/test/mapper/TestMapper.xml"><!--區分不同映射器--><!--條件查詢--><select id="getArtist" resultType="String">select aName from artist<!--填寫SQL語句,里面的變量都是數據庫的表名和字段名--></select>
</mapper>

注:若xml配置文件中出現找不到映射器文件的情況,注意配置文件中mapper標簽內的映射器引用格式。


接口函數

編寫映射器接口:

package com.test.mapper;import com.test.artist;import java.util.List;public interface TestMapperInterface {List<artist> selectArtist();artist getArtistById(int a);int addArtist(artist newArtist);int deleteArtist(int d);
}

要讓映射器關聯上映射器接口,只需要修改映射器的namespace為接口地址:

<?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.test.mapper.TestMapperInterface"><resultMap id="test" type="com.test.artist"><result column="aID" property="aID"/></resultMap><select id="selectArtist" resultMap="test">select * from artist</select><!--條件查詢--><select id="getArtistById" resultMap="test">select * from artist where aID = #{a}<!--接口形參名--></select><!--插入操作--><insert id="addArtist">insert into artist(aID,aName,asex) values (#{aID},#{aName},#{asex})</insert><!--刪除操作--><delete id="deleteArtist" parameterType="com.test.artist">delete from artist where aID = #{d}</delete></mapper>

接口中的方法會自動對應上映射器中的SQL執行語句id

修改配置文件中的mapper路徑:

<mapper resource = "com/test/mapper/TestMapper.xml"/>
因為接口的命名空間通常是在類路徑下的某個位置,所以這里要將URL改成 resource

主函數調用映射器接口:

package com.test;import com.test.mapper.TestMapperInterface;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.FileInputStream;
import java.io.FileNotFoundException;public class Main {public static void main(String[] args) throws FileNotFoundException {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){TestMapperInterface mapper = sqlSession.getMapper(TestMapperInterface.class);mapper.selectArtist().forEach(System.out::println);System.out.println("\n");System.out.println(mapper.getArtistById(2089));}}
}

MyBatis與JDBC的差異

JDBC和Mybatis優缺點對比
JDBCMybatis
DriverManager驅動類連接數據庫,java代碼與數據庫耦合

配置xml文件中連接數據庫,使得java代碼與數據庫分離

Statement對象中執行SQL語句,java代碼與SQL語句耦合映射器的xml文件中執行SQL語句,使得java代碼與SQL語句分離
ResultSet對象中接收SQL語句結果,每條結果需要指針遍歷。直接通過SqlSession中的方法接收SQL語句結果,結果是一個集合

綜上,相比于JDBC所有功能都在java代碼中執行,Mybatis盡管結構更加復雜,但每個文件負責不同的功能,更加便于管理。

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

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

相關文章

Crypto(10)BUUCTF-RSA3(共模攻擊)

一.共模攻擊的現實意義 好奇一個問題&#xff0c;即共模攻擊有什么現實意義&#xff1f; 發現也沒有什么現實意義&#xff0c;因為&#xff08;n,e&#xff09;是已知的&#xff0c;通常每個用戶的n是不同的&#xff0c;除非特殊情況吧 二.共模攻擊的數學原理&#xff1a; 通…

最重要的BI測試-適用于任何BI和分析平臺

為什么 BI 測試是答案 相信你的數據可視化是成功執行商業智能 (BI) 和分析項目的關鍵因素。我敢肯定&#xff0c;你遇到過以下情況&#xff1a;業務主管或業務用戶反饋說他們的分析看起來不對&#xff0c;他們的 KPI 看起來有問題&#xff0c;或者速度太慢而無法使用。要問自己…

SQL 通配符:用于模糊搜索和匹配的 SQL 關鍵技巧

SQL通配符字符 通配符字符用于替代字符串中的一個或多個字符。通配符字符與LIKE運算符一起使用。LIKE運算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 ‘a’ 開頭的客戶&#xff1a; SELECT * FROM Customers WHERE CustomerName LIKE a%;通配符字符 符…

5:kotlin 類(Classes )

kotlin支持面向對象編程&#xff0c;也有雷和對象的概念 要聲明一個類需要使用class關鍵字 class Customer屬性&#xff08;Properties&#xfeff;&#xff09; 可以在類名后邊添加()&#xff0c;在()里邊聲明屬性 class Contact(val id: Int, var email: String)聲明了不…

單片機、ARM、嵌入式開發、Android 底層開發有什么關系?

單片機、ARM、嵌入式開發、Android 底層開發有什么關系&#xff1f; 從我目前的見識來看&#xff1a; 單片機是個系統&#xff08;比如&#xff1a;51、AVR、PLC...&#xff09;&#xff0c;其中包含了去除了輸入輸出之外的運算器、控制器、存儲器&#xff0c;我們用程序可以非…

從Redis反序列化UserDetails對象異常后發現FastJson序列化的一些問題

最近在使用SpringSecurityJWT實現認證授權的時候&#xff0c;出現Redis在反序列化userDetails的異常。通過實踐發現&#xff0c;使用不同的序列化方法和不同的fastJson版本&#xff0c;異常信息各不相同。所以特地記錄了下來。 一、項目代碼 先來看看我項目中redis相關配置信息…

黑馬點評筆記 redis緩存三大問題解決

文章目錄 緩存問題緩存穿透問題的解決思路編碼解決商品查詢的緩存穿透問題 緩存雪崩問題及解決思路緩存擊穿問題及解決思路問題分析使用鎖來解決代碼實現 邏輯過期方案代碼實現 緩存問題 我們熟知的是用到緩存就會遇到緩存三大問題&#xff1a; 緩存穿透緩存擊穿緩存雪崩 接…

QOverload獲取重載的信號

QOverload獲取重載的信號 多個信號或者函數同名&#xff0c;但是不同參數&#xff0c;也就是存在重載 可以使用QOverload獲取指定的重載函數 QOverload<int>::of(&QComboBox::currentIndexChanged)上面的代碼就是用來獲取參數為int的那個函數

【Spring篇】JDK動態代理

目錄 什么是代理&#xff1f; 代理模式 動態代理 Java中常用的代理模式 問題來了&#xff0c;如何動態生成代理類&#xff1f; 動態代理底層實現 什么是代理&#xff1f; 顧名思義&#xff0c;代替某個對象去處理一些問題&#xff0c;謂之代理&#xff0c;那么何為動態&a…

短視頻賬號矩陣系統saas化批量管理部署搭建/技術

一、短視頻矩陣系統建模----技術api接口--獲取用戶授權 技術文檔分享&#xff1a; 本系統采用MySQL數據庫進行存儲&#xff0c;數據庫設計如下&#xff1a; 1.用戶表&#xff08;user&#xff09;&#xff1a; - 用戶ID&#xff08;user_id&#xff09; - 用戶名&#xff08;…

SELinux零知識學習二十七、SELinux策略語言之類型強制(12)

接前一篇文章:SELinux零知識學習二十六、SELinux策略語言之類型強制(11) 二、SELinux策略語言之類型強制 4. 類型規則 類型規則在創建客體或在運行過程中重新標記時指定其默認類型。在策略語言中定義了兩個類型規則: type_transtition在域轉換過程中標記行為發生時以及創…

詳解Vue中的computed和watch

詳解Vue中的computed和watch 前言原理computedcomputed特點computed有幾種創建方式應用 WatchWatch有幾種創建方式Watch主要內容Watch特性應用場景 computed和Watch區別 前言 在Vue當中&#xff0c;watch和computed都可以實現監聽的效果&#xff0c;本文主要是圍繞watch和comp…

【理解ARM架構】操作寄存器實現UART | 段的概念 | IDE背后的命令

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;專欄&#xff1a;《理解ARM架構》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交給時間&#xff01; 目錄 &#x1f360;操作寄存器實現UART&#x1f35f;UART原理&#x1f35f;編程 &#x1f360;…

python——第十二天

內置模塊或者其他模塊學習方式&#xff1a; dir help os模塊負責程序與操作系統的交互&#xff0c;提供了訪問操作系統底層的接口&#xff1b;即os模塊提供了非常豐富的方法用來處理文件和目錄。 os&#xff1a; os.path 遍歷C盤代碼 import os from os import path def …

修改YOLOv5的模型結構第三彈

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制&#x1f680; 文章來源&#xff1a;K同學的學習圈子 文章目錄 任務任務拆解 開始修改C2模塊修改yolo.py修改模型配置文件 模型訓練 上次已…

【工具使用】Keil工具的使用——常用配置介紹

Keil調試具體教程學習 目錄 ???????Keil調試具體教程學習 常用功能總結 &#xff08;2&#xff09;目標設置&#xff08;Target&#xff09; ①設置晶振頻率 ②跨模塊優化選項 ③微庫選項 &#xff08;3&#xff09;輸出設置&#xff08;Output&#xff09; ①…

插入排序(形象類比)

最近在看riscv手冊的時候&#xff0c;里面有一段代碼是插入排序&#xff0c;但是單看代碼的時候有點迷&#xff0c;沒看懂咋操作的&#xff0c;后來又查資料復習了一下&#xff0c;最終才把代碼看明白&#xff0c;所以寫篇博客記錄一下。 插入排序像打撲克牌 這是我聽到過比較形…

list的總結

目錄 1.什么是list 1.1list 的優勢和劣勢 優勢&#xff1a; 劣勢&#xff1a; 2.構造函數 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍歷 4. list容量函數 4.1. empty() 4.2. siz…

語音合成綜述Speech Synthesis

一、語音合成概述 語音信號的產生分為兩個階段&#xff0c;信息編碼和生理控制。首先在大腦中出現某種想要表達的想法&#xff0c;然后由大腦將其編碼為具體的語言文字序列&#xff0c;及語音中可能存在的強調、重讀等韻律信息。經過語言的組織&#xff0c;大腦通過控制發音器…

正整數分解

題目編號&#xff1a;Exp08-Basic01&#xff0c;GJBook3-12-05 題目名稱&#xff1a;正整數分解 題目描述&#xff1a;正整數n&#xff0c;按第一項遞減的順序依次輸出其和等于n的所有不增的正整數和式。 輸入&#xff1a;一個正整數n&#xff08;0<n≤15&#xff09;。 …