MyBatis怎麼連接到Mysql資料庫?

2021-01-04 很神很奇很神奇

昨天講解了如何給配置文件導入約束,今天完成配置之後就可以連接到Mysql資料庫,首先說一下SqlMapConfig.xml中標籤的作用。

大家看一下,environments 是它的環境標籤,在這個標籤裡面有一個

transactionManager標籤:這是指定一個事物管理器。

dataSource標籤是數據源的意思:

property標籤:這是一個數據結構,繼承自HashTable,這裡不說hashtable和hashmap的區別,大體知道他是一個Key,一個Value,所以是map結構。

第一個property:name就是name,隨便寫,這裡寫個driver告訴你這個是個驅動,這裡面的key都可以隨便寫,我們真正使用的只是value而已,key

只是找到value的一個引用,用K,V的結構能更清晰讓人看懂,也是用Key來對Value作一個說明。這裡的Value寫JDBC到Mysql驅動的全包名,注意一定要寫全包名,同時不可以創建相同名字的Java類,規定是這樣的,不然他會找不到驅動文件的位置,如果你和jdbc起了同樣的名字,那麼該配置文件的加載順序有可能會出錯,到時候會報錯。

第二個property:Mysql連接的url,它的正確結構是:jdbc:mysql://localhost:3306/database

這是基本的格式,第一段jdbc是它的連接方式,通常不變,貌似c語言還是c#的叫做cdbc,所以你應該懂jdbc的意思第二段mysql是資料庫類型,如果你連oracle就寫oracle也很簡單,第三段是你的資料庫的網絡地址,如果安裝在本機就寫localhost,如果安裝在其他電腦就寫它的ip地址如:32.154.46.854

這個IP是我編的,同在一個內網寫就寫192.168.1.56這種。第四段3306是mysql資料庫默認的埠號,我知道tomcat的埠號是可以改的,所以這個應該也可以改,至於埠號是做什麼的我也不太清楚,這個涉及作業系統原理,貌似和埠映射有關?大家知道常用埠號多少即可,第五段是你的資料庫名字,這個資料庫不是你windows,mysql.exe 這個mysql的名字,而是在你的資料庫裡面它分為很多database, 這裡寫database的名字,千萬不要寫mysql。oracle也一樣。前面固定格式說完了,就是jdbc:mysql://localhost:3306/database ,通常變化的只有localhost和database兩個欄位。然後看我後面加了一個?號對吧,?後面跟的是參數,大家看瀏覽器地址欄,當我們進入一個網頁之後地址欄除了該頁面的地址外還會有?加上一串參數,這個是get類型的請求,?後面的東西可以隨便寫,但是資料庫之後讀取固定Key後的value值,比如你在後面寫個?1+2=5是沒有影響的。characterEncoding=utf-8"意思為將資料庫字符集設為UTF-8,這個國際通用編碼不會出現亂碼的情況。如果連接到的資料庫是iso8859-1,你的電腦是GBK或者是UTF-8的話就會出現亂碼。指定這個字符集不會出現亂碼的情況。

第三個property:用戶名,username是給你看的,root是給mysql看的。

第四個property:密碼,password是給你看的,123456是給mysql看的。

SqlMapConfig.xml內容

然後我們創建一個mapper映射文件,文件名就是你的pojo類名.xml,也可以隨便取,但是這樣便於閱讀。pojo類作為mybatis進行sql映射使用,pojo類通常與資料庫表對應也叫entity,也叫domain。反正就是將資料庫裡的錶轉為一個面向對象的類,裡面包含了表裡的欄位,每一個類對應資料庫裡的一張表。mapper映射文件也需要一段約束,講下面文字複製到xml中即可,它的作用相當於HTML中的header。

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

這個文件裡面是用來寫Mybatis的sql語句的。

為mapper文件加入約束

那麼這個mapper文件如果被框架加載到的呢?我們之前說過mybatis框架只會加載固定名字的SqlMapConfig,xml,於是我們在SqlMapConfig,xml中加入另一個標籤,引入mapper文件的地址。

在environments標籤下另起一個標籤,注意mappers和environments屬同級別,不要寫到裡面去。mappers相當於一個集合,我們現在裡面寫一個<mapper/> 然後在/的前面按ctrl+/,會提示你幾個選擇class,url,resource。這幾個都可以表示路徑,大家使用resource即可。resource是SqlMapConfig.xml的相對路徑,如果他倆同級,那麼他們的父目錄可以省略,直接寫位置。注意這裡不是文件名,而是相對於SqlMapConfig.xml的相對路徑,如果mapper文件在SqlMapConfig.xml的同級目錄下,假設這個同級目錄叫aa,那麼寫法就是aa/Ljq.xml,如果SqlMapConfig.xml的父目錄與cc同級,則為../aa/Ljq.xml。此外絕對路徑和相對路徑初學者們很多會混淆,大家不如不明白可以自己多試試。./表同級目錄下,通常省略,../表父目錄。

在SqlMapConfig.xml中配置mapper文件位

現在我們創建一個測試類,來試試mybatis這個框架是否能夠成功執行。

首先我們new一個SqlSessionFactoryBuilder的實例,大家看到我寫的了。用的其實是它的build()這個方法,所以讓builder實例處於游離狀態,用一下build()方法就完事,它的生命周期是轉瞬即逝的。哈哈,其實沒什麼卵用,也不會節省多少資源,但是逼格會高。參數需要我們傳入配置文件,你們看他有很多參數,我們的配置寫在xml裡,所以選哪一個呢?都可以哈哈。

讀取配置文件方式

大家看到這一段代碼就會明白,哦原來SqlMapConfig.xml的名字不是固定的呀,確實是這樣,但是通常寫SqlMapConfig.xml屬於一種行內規範。首先我們需要一個SqlSessionFactory 實例用來創建session對象,它·封裝的挺複雜大家可能稍微難理解。我們每一條連接都是一個session,這裡想當於一個工廠類幫我們控制了Session創建,不會交給你讓你自己隨便創建的。

下面我用另一種寫法大家一下就能看出來參數是什麼了。

resource.getR.....是一個InputStream輸入流,然後在bulid()參數內把流放進去。大家可以看到有好幾個都是靜態方法,不給你創建實例的。所以說框架可能是出於安全的原因或是什麼,不是所有東西都對開發者開放的。

我們通過session工程為我們打開一個session,然後用這個session對象就可以執行SQL語句了。那麼sql語句寫在哪裡呢?

Mybatis的sql是寫在mapper文件裡的,就是我們剛才的Ljq.xml。 先說一個它裡面的標籤

<mapper></mapper>這個是根標籤,所有的語句寫在它裡面 它有一個屬性是namespace,命名空間,你可以理解為java裡面的包名。為了區分不同的sql語句,命名空間也就是前綴,其實很多場景都會用到的,目的只有一個更好的幫助人還是機器區分。

<select>標籤就是表示這是個select語句,可能是用於區分不同語句對事務的控制吧,你同樣的一條sql寫在select和delete標籤裡面消耗的資源是不一樣的。屬性也是不一樣的。看select有一條屬性叫做id,他是作什麼用的呢?看上面圖,大家可以把ID當做方法名,或者sql名,在我們執行sql的時候session對象需要知道執行的是哪一條sql,這時候填寫id就對。同時要注意,namespace命名空間是不可以為empty的,不然會報錯,所以正確寫法是以String形式,寫namespace.id。這樣session對象就可以找到到底執行哪一條sql語句了。resultType是返回值類型,我寫的是我的pojo類對象,所以在列印的時候會直接列印Ljq.toString()的內容。

下面我們一起來看看查詢結果吧。它警告我了,說我在SqlMapConfig.xml裡寫的url太老了,現在它jdbc驅動已經改名了,名字是mysql-connector-java,大家如果沒有可以在maven裡搜索mysql-connector-java,剛才試了下 搜索jdbc的話已經搜不到了。

最後給大家說一下這個框架的執行過程。從我們代碼裡面走,首先SqlSessionFactory去加載SqlMapConfig.xml,裡面的運行環境,包含連接到數據的mysql-connector-java這個驅動jar,url,用戶名密碼等,然後依次加載mapper文件中的內容。加載之後全部信息正確的話進行下一步,創建Session工廠對象,Session工廠對象創建一個Session對象,然後通過這個Session對象執行mapper中的sql語句,這時候框架通過ssl協議拿到數據執行sql結果的數據返回到我們的java對象中,最後列印出的就是資料庫中查詢到得結果。

可能有點長,但是我儘量給大家說的清晰一些,想到的知識點也會補充一些,希望大家耐心一些慢慢消化,有不明白的地方在下方留言即可。

相關焦點

  • 「MyBatis」MyBatis修煉之二 Maven項目配置MyBatis連接mySQL
    -- mysql資料庫依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</
  • mysql怎麼連接資料庫
    今天介紹一下php搭配資料庫mysql怎麼使用。如果在自己電腦上運行,可以先打開運行環境,小編用的是WampServer,網上有很多集成包可以使用,比如wamp,phpstudy等等,這個有疑問的話小編可以單獨寫篇文章介紹php環境問題。
  • 從零搭建SpringBoot+MyBatis+MySQL
    (持久層)、mysql(資料庫驅動)url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC12345678自動配置時會將資料庫連接相關信息注入到mybatis中.
  • PHP怎麼連接Mysql資料庫? - php中文網
    PHP連接mysql資料庫是PHP新手們必須要掌握的一項技能,只要掌握了PHP對資料庫進行增刪改查等操作,就可以寫出一些簡單且常見的程序。如留言表,新聞頁等。本篇文章主要給大家詳細介紹PHP連接Mysql資料庫的兩種常用方法。
  • SpringBoot:資料庫訪問之Mybatis
    在SpringBoot中使用mybatis非常簡單,我們只需要引入依賴即可。</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version></dependency><dependency> <groupId>mysql</groupId>
  • MyBatis Generator輕鬆實現MYSQL分頁插件
    但是唯一讓人不爽的是,生成的代碼中的資料庫查詢沒有分頁功能。本文介紹如何讓MyBatis Generator生成的代碼具有分頁功能。MyBatis Generator配置文件MyBatis Generator通常會有一個xml配置文件,用來指定連接的資料庫
  • SpringBoot+MyBatis+MySQL讀寫分離
    引言讀寫分離要做的事情就是對於一條SQL該選擇哪個資料庫去執行,至於誰來做選擇資料庫這件事兒,無非兩個,要麼中間件幫我們做,要麼程序自己做。因此,一般來講,讀寫分離有兩種實現方式。第一種是依靠中間件(比如:MyCat),也就是說應用程式連接到中間件,中間件幫我們做SQL分離;第二種是應用程式自己去做分離。
  • Spring Boot之 Mybatis Druid 資料庫
    正題Spring boot :2.1.5RELEASE ;資料庫(Mysql、Oracle);Mybatis;阿里雲的連接池 : Druid ;步驟1.POM依賴<!-- MyBatis --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version>
  • 從 JDBC 到 Mybatis,看這篇就夠了
    大致可以分為六個步驟:加載驅動程序;獲得資料庫連接;創建一個Statement對象;操作資料庫,實現增刪改查;獲取結果集;關閉資源。1.2 傳統 JDBC 的問題創建資料庫的連接存在大量的硬編碼;執行 statement 時存在硬編碼;頻繁的開啟和關閉資料庫連接,會嚴重影響資料庫的性能,浪費資料庫的資源;
  • SpringBoot + MyBatis + MySQL讀寫分離實踐!
    引言讀寫分離要做的事情就是對於一條SQL該選擇哪個資料庫去執行,至於誰來做選擇資料庫這件事兒,無非兩個,要麼中間件幫我們做,要麼程序自己做。因此,一般來講,讀寫分離有兩種實現方式。第一種是依靠中間件(比如:MyCat),也就是說應用程式連接到中間件,中間件幫我們做SQL分離;第二種是應用程式自己去做分離。
  • Java連接MySQL資料庫
    下載路徑:https://dev.mysql.com/downloads/connector/j/下載名稱如:mysql-connector-java-5.7.26-bin.jar第二步 導入connector創建普通Java項目,src同級目錄新建文件夾
  • Linux下C++/C連接MySQL資料庫
    MySQL 資料庫有兩種方法:第一種:利用ADO連接 第二種:利用 MySQL 自己的 API 函數進行連接第一種ADO可以連接多種資料庫,例如:mysql、sqlserver、oracle、access
  • Mysql連接資料庫異常匯總【必收藏】
    在Centos上部署項目發現一個奇怪的問題,資料庫連接一直拋異常。於是花了兩個小時搜了各種資料庫連接異常導致的原因,最終問題得以解決。同時,把解決過程中搜集到的異常信息匯總一下,當大家遇到類似的問題時,給大家以思路。必須珍藏。問題現象先來說說我遇到的問題。
  • 記錄自己的第一個mybatis項目
    從資料庫中找來數據2.1 通過mybatis-config.xml 定位哪個資料庫2.2 通過Category.xml執行對應的select語句2.3 基於Category.xml把返回的資料庫記錄封裝在Category對象中2.4 把多個Category對象裝在一個Category集合中返回一個Category集合
  • MySQL資料庫怎麼升級 MySQL資料庫升級教程
    邏輯方式升級邏輯方式升級其實就是通過邏輯備份工具(例如mysqldump工具)將資料庫、表、其他相關對象及數據邏輯備份成SQL腳本,再將其還原至MySQL5. 7 的實例中。詳細步驟如下:1.1  備份資料庫當前資料庫的版本為MySQL5.6.27,現在準備備份
  • java連接mysql資料庫的五種方式
    Jdbc-----資料庫的五種連接方式第一種方式:將用戶名和密碼封裝在Properties類中首先,導入資料庫連接包這個是毋庸置疑的。創建一個jdbc驅動dirver。將資料庫(以MySQL為例)的url保存在所創建的字符串url中。
  • 實例,PDO實現連接MySQL資料庫
    實例說明在學習通過 PDO 連接 MySQL 資料庫前,大家先在phpMyAdmin下創建一個MySQL 資料庫 test,並且在 test 資料庫中創建數據tb_pdo, 然後定義資料庫連接的參數,最後,通過 PDO 構造函數創建連接。運行效果如下圖所示。
  • SpringBoot+MyBatis+Druid整合demo
    -- mybatis代碼生成插件 --> <!--如果使用的mysql驅動是6.x的,那就無法生成除Insert以外的方法,使用5.x版本的就可以生成。 --> <!
  • Python3連接MySQL8.0資料庫,難不?
    親們,久等了,終於有時間講一下Python3操作MySQL資料庫了,真可謂「千呼萬喚始出來,猶抱琵琶半遮面」。1不用我多說,應該都知道,Python連接資料庫的前提是:MySQL已經安裝並啟動了。沒安裝的,先去MySQL官網下載安裝包。官網上64位的只有壓縮包,那就下載mysql-8.0.15-winx64.zip並進行解壓縮。
  • SpringBoot集成Mybatis
    --MySQL驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId