天天看點

mybatis mysql配置檔案詳解_MyBatis配置檔案詳解

用maven搭建的MyBatis環境,目錄結構如下

mybatis mysql配置檔案詳解_MyBatis配置檔案詳解

配置檔案在src/main/resources目錄下,是configuration.xml

1:先看一下簡單的配置:

congfiguration:根元素

environments:配置MyBatis環境,可以配置過個運作環境,但是SqlSessionFactory隻能選擇一個運作環境

transactionManager:事務管理器

type=JDBC或者MANAGED

JDBC:使用JDBC的送出和復原設定;

MANAGED:讓容器管理事務的整個生命周期

dataSource:資料源

dataSource 元素使用标準的JDBC 資料源接口來配置JDBC 連接配接對象源。

MyBatis 内置了三種資料源類型:

UNPOOLED – 這個資料源的實作是每次被請求時簡單打開和關閉連接配接。它有一點慢,  這是對簡單應用程式的一個很好的選擇, 因為它不需要及時的可用連接配接。 不同的資料庫對這 個的表現也是不一樣的, 是以對某些資料庫來說配置資料源并不重要,  這個配置也是閑置的。 UNPOOLED 類型的資料源僅僅用來配置以下 5 種屬性:

driver – 這是 JDBC 驅動的 Java 類的完全限定名(如果你的驅動包含,它也不是 資料源類)。

url – 這是資料庫的 JDBC URL 位址。

username – 登入資料庫的使用者名。

password – 登入資料庫的密碼。

defaultTransactionIsolationLevel – 預設的連接配接事務隔離級别。

作為可選項,你可以傳遞資料庫驅動的屬性。要這樣做,屬性的字首是以“driver.”開 頭的,例如:

driver.encoding=UTF8

這 樣 就 會 傳 遞 以 值 “ UTF8 ” 來 傳 遞 屬 性 “ encoding ”, 它 是 通 過  DriverManager.getConnection(url,driverProperties)方法傳遞給資料庫驅動。

POOLED – 這是 JDBC 連接配接對象的資料源連接配接池的實作,用來避免建立新的連接配接執行個體  時必要的初始連接配接和認證時間。這是一種目前 Web 應用程式用來快速響應請求很流行的方 法。

除了上述(UNPOOLED)的屬性之外,還有很多屬性可以用來配置 POOLED 資料源:

poolMaximumActiveConnections – 在任意時間存在的活動(也就是正在使用)連  接的數量。預設值:10

poolMaximumIdleConnections – 任意時間存在的空閑連接配接數。

poolMaximumCheckoutTime – 在被強制傳回之前,池中連接配接被檢查的時間。預設 值:20000 毫秒(也就是 20  秒)

poolTimeToWait – 這是給連接配接池一個列印日志狀态機會的低層次設定,還有重新 嘗試獲得連接配接, 這些情況下往往需要很長時間  為了避免連接配接池沒有配置時靜默失 敗)。預設值:20000 毫秒(也就是 20 秒)

poolPingQuery – 發送到資料的偵測查詢,用來驗證連接配接是否正常工作,并且準備 接受請求。預設是“NO PING QUERY  SET” ,這會引起許多資料庫驅動連接配接由一 個錯誤資訊而導緻失敗。

poolPingEnabled – 這是開啟或禁用偵測查詢。如果開啟,你必須用一個合法的 SQL 語句(最好是很快速的)設定  poolPingQuery 屬性。預設值:false。

poolPingConnectionsNotUsedFor – 這是用來配置 poolPingQuery 多次時間被用一次。  這可以被設定比對标準的資料庫連接配接逾時時間, 來避免不必要的偵測。 預設值: 0(也就是所有連接配接每一時刻都被偵測-但僅僅當 poolPingEnabled 為  true 時适用)。

JNDI – 這個資料源的實作是為了使用如 Spring 或應用伺服器這類的容器, 容器可以集  中或在外部配置資料源,然後放置一個 JNDI 上下文的引用。這個資料源配置隻需要兩個屬 性:

initial_context – 這 個 屬 性 用 來 從 初 始 上 下 文 中 尋 找 環 境 ( 也 就 是  initialContext.lookup(initial——context) 。這是個可選屬性,如果被忽略,那麼 data_source 屬性将會直接以  initialContext 為背景再次尋找。

data_source – 這是引用資料源執行個體位置的上下文的路徑。它會以由 initial_context  查詢傳回的環境為背景來查找,如果 initial_context 沒有傳回結果時,直接以初始 上下文為環境來查找。

和其他資料源配置相似, 它也可以通過名為 “env.” 的字首直接向初始上下文發送屬性。 比如:

env.encoding=UTF8

在初始化之後,這就會以值“UTF8”向初始上下文的構造方法傳遞名為“encoding” 的屬性。

mapper:指定映射檔案或映射類

:

2:StudentMapper.xml

insert into student values(default,#{name},#{password})

這個是個簡單的插入過程,我們的parameterType是個全路徑com.zhao.entity.Student,如果每個都寫這麼全的話 會很麻煩,是以我們可以配置它的别名,當然,别名要配置在configuration.xml中

以後再StudentMapper.xml中直接寫Student就好了,這麼看就友善多了。

目前就用到這麼多内容,configuration.xml就先說到這。

接下來說說StudentMapper.xml,在這個檔案中定義了我們的一些操作,比如說insert delete select等操作,我們都有标簽。在這個配置檔案中主要有兩個東西需要記住,一個是

标簽的namespace屬性,我們通過這個屬性來定位到這個配置檔案。還有一個是,這個最有意思。

packagecom.zhao.entity;public classStudent {private intid;privateString name;privateString password;publicStudent() {

}publicStudent(String name, String password) {this.name =name;this.password =password;

}public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

@OverridepublicString toString() {return "Student [id=" + id + ", name=" + name + ", password=" + password + "]";

}

}

mybatis mysql配置檔案詳解_MyBatis配置檔案詳解

可看到我們的資料表的列和實體類的屬性并不一樣,是以需要進行簡單的配置。我們執行插入的操作可能還不那麼明顯,如果我們執行的是查詢操作

select * from student where stu_id=#{id}

前面我們已經設定了别名,resultType可以直接寫成Student,不用寫com.zhao.entity.Student了。接下來進行測試

@Testpublic void testSelect() throwsIOException {

Reader reader=Resources.getResourceAsReader("configuration.xml");

SqlSessionFactory factory=newSqlSessionFactoryBuilder().build(reader);

SqlSession session=factory.openSession();

Student student=session.selectOne("com.zhao.mapper.StudentMapper.selectStudentById", 1);

System.out.println(student);

session.commit();

session.close();

}

mybatis mysql配置檔案詳解_MyBatis配置檔案詳解

傳回值為Null,顯然我們從資料庫查出來的内容是stu_id  stu_name  stu_password ,可是我們的傳回值類型是Student,沒辦法完成封裝,是以我們需要resultMap

這裡的Student依舊是我們的别名,然後通過下面的内容完成一一對應。還有 在select裡也需要寫上resultMap="result"

接下來測試

mybatis mysql配置檔案詳解_MyBatis配置檔案詳解

這樣的結果才是對的。