經典三層框架初識--一.Mybatis
阿新 • • 發佈:2018-12-17
- 對於Mybatis來說有兩種配置檔案--咱們這裡用xml
- 全域性配置:至少四個引數 (驅動 url username password)-->來配置連線池
-
<?xml version="1.0" encoding="UTF-8"?> <!-- 框架需要讀取配置檔案,如果你隨便寫,它就不會認識 ,所以一般情況下都會給這個xml進行一下約束 就是規定你可以寫哪些標籤,以及哪些標籤代表什麼含義,框架來說就是讀取指定的標籤,來獲取裡面的值 --> <!-- XML 配置檔案(configuration XML)中包含了對 MyBatis 系統的核心設定, 包含獲取資料庫連線例項的資料來源(DataSource)和決定事務作用域和控制方式的事務管理器(TransactionManager)。 XML 配置檔案的詳細內容後面再探討,這裡先給出一個簡單的示例: http://www.mybatis.org/mybatis-3/zh/getting-started.html官網入門案例中抄過來的 資料來源->連線池 TransactionManager->事務管理器 下面的這一段做了兩件事:連線池的配置 事務管理器的配置 抄過來 --> <!-- 這一標籤的這麼大段就是要求你如何寫xml文件 DOCTYPE->文件型別 configuration是xml文件的根標籤 xml的描述檔案(約束檔案):一般是dtd或者是schema->用來約束標籤,告訴你裡面能寫什麼標籤以及標籤的順序 --> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 環境,和context上下文類似(以後進行的增刪改查的操作都在這個環境中,都在這個上下文中): 複數:可以配置多個環境,資料庫種類不同;軟體的本地環境,預上線平臺,線上環境等,可以寫很多,但是用的時候是一個 default:預設使用環境,這裡的就是下面environment的id表示;這裡default肯定和下面某一個environment的id值一樣 --> <environments default="development"> <!-- 一個環境,id:這個環境的唯一標示 如果id是product表示線上環境 --> <environment id="development"> <!-- 事務管理器:事務的管理和策略 JDBC 只是Mybatis框架裡的一個管理器 --> <transactionManager type="JDBC"/> <!-- 資料來源:管理連線池 儲存的是連線 解決頻繁的開啟關閉連線 如果瞭解過小沒有必要--意味著連線池不一定好 但是連線數過大會很不錯 下面也僅僅是Mybatis裡面的連線池 流行的連線池:dbcp/c3p0/droid/jdbcTemplate都是連線池,這裡是僅僅配置Mybatis中的連線池 dataSource這個標籤就是對應一個物件,下面的property的name就是這個物件的四個屬性 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <!-- 這裡咱們先手動填入引數 com.mysql.jdbc.Driver 來代替佔位符裡面的內容,後面再講用佔位符--> <property name="url" value="${url}"/> <!--jdbc:mysql:///db1808?useSSL=true --> <property name="username" value="${username}"/><!-- root--> <property name="password" value="${password}"/><!-- root--> </dataSource> </environment> </environments> <!-- 對映器:配置對映檔案的路徑,我們前面說過,配置檔案由兩種 這裡就是 告訴我們配置的這個mybatis全域性配置檔案 對映配置檔案的路徑在什麼地方 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
- 對映配置:定製化sql,輸入引數和輸出結果對映 --這個對我們來說更為重要,是真正處理我們的業務
-
<?xml version="1.0" encoding="UTF-8"?> <!-- 對映配置檔案:主要是寫怎麼做增刪改查 ,如何實現輸入引數和輸出結果對映____定製化sql的配置 咱們這個例子:就是根據id查到一個記錄,把記錄中的各個欄位封裝到一個物件中的各個屬性中區 --> <!-- http://www.mybatis.org/mybatis-3/zh/getting-started.html中探究已對映的 SQL語句這一部分 將這裡面的例項也抄到下面 --> <!-- 下面和mybatis類似,也是規範標籤的寫法 --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 下面namespace是名稱空間 ,本質上就是一個字串,作用是隔離SQL--> <mapper namespace="adhs"> <!-- 增刪改查 --> <insert id=""></insert> <update id=""></update> <delete id=""></delete> <!-- 我們案例要做的是根據uid查詢userinfo的物件 這裡的佔位符不是?了,是#{} 這裡面最終的值是輸入引數傳進來的 ,給到#{}裡 關鍵字: 和輸入引數的型別有關係 簡單型別:可任意寫 引用:屬性名稱 id:標籤的唯一標識 parameterType="" -引數的型別,可選的,可寫可不寫 簡單型別 引用型別 resultType="" 輸出結果型別,通過sql查詢出來的結果,需要封裝到一個物件中,這個物件是什麼,需要這個來宣告 注意:我們寫的是全限定名稱 我們要根據全限定名稱來建立一個物件,最後把結果封裝到這個物件裡面去,這個過程不用我們去做,Mybatis自動幫我們做了 --> <!-- 這裡的insert,select..標籤就代表我們以前Statement(或其子介面)的物件 ,id就是相當於物件的名稱--> <select id="selectUser" resultType="pojo.UserInfo"> select * from userinfo where uid = #{uid} </select> <!-- 這裡我們來理解一下上面的名稱空間是如何隔離sql的 多個mapper用這個名稱空間來區分 --> </mapper>
-
這裡我們還需要一個類,來作為儲存我們記錄的封裝物件
-
package pojo; public class UserInfo { private int uid; private String username; private String password; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "UserInfo [uid=" + uid + ", username=" + username + ", password=" + password + "]"; } }
-
讀取配置執行測試
-
Sqlsession:面向開發者介面--在這個接口裡面,提供了很多傳送SQL的命令,拿到這個介面的實現類物件就能直接傳送SQL了
-
Sqlsession的建立是通過工廠模式建立管理的 SqlSessionFactory:session工廠,建立和管理session物件需要讀取配置檔案才能創建出來
-
package test; import java.io.IOException; import java.io.Reader; 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 pojo.UserInfo; public class Test { public static void main(String[] args) throws IOException { //讀取配置檔案 //mybatis提供了一個讀取配置檔案轉換為輸入流的方法 Reader reader = Resources.getResourceAsReader("mybatis.xml"); //得到工廠的方法 SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader); //傳送定製好的SQL //通過工廠拿到物件 SqlSession session = ssf.openSession(); //封裝到物件裡面去 // session.selectOne(String statement, Object parameter) uid的值 UserInfo info = session.selectOne("adhs.selectUser", 1); System.out.println(info); //歸還連線 session.close(); } }
-