Mybatis配置學習
Mybatis介紹:
MyBatis的前身就是iBatis,iBatis本是apache的一個開源專案,2010年5月這個專案由apahce sofeware foundation 遷移到了google code,並且改名為MyBatis。
iBATIS 一詞來源於“internet”和“abatis”(鐵絲網)的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
MyBatis 是支援普通 SQL 查詢,儲存過程和高階對映的優秀持久層框架。MyBatis 消除 了幾乎所有的 JDBC 程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML 或註解用於配置和原始對映,將介面和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 物件)對映成資料庫中的記錄。
-
Mybatis 結構圖
-
Mybatis 配置
-
mybatis配置
SqlMapConfig.xml,此檔案作為mybatis的全域性配置檔案,配置了mybatis的執行環境等資訊。
mapper.xml檔案即sql對映檔案,檔案中配置了操作資料庫的sql語句。此檔案需要在SqlMapConfig.xml中載入。 -
通過mybatis環境等配置資訊構造SqlSessionFactory即會話工廠
-
由會話工廠建立sqlSession即會話,操作資料庫需要通過sqlSession進行。
-
mybatis底層自定義了Executor介面操作資料庫,Executor介面有兩個實現,一個是基本實現、一個是快取實現。
-
Mapped Statement也是mybatis一個底層物件,它包裝了mybatis配置資訊及sql對映資訊等。mapper.xml檔案中一個sql對應一個Mapped Statement物件,sql的id即是Mapped statement的id。
-
Mapped Statement對sql執行輸入引數進行定義,包括HashMap、基本型別、pojo,Executor通過 Mapped Statement在執行sql前將輸入的java物件對映至sql中,輸入引數對映就是jdbc程式設計中對preparedStatement設定引數。
-
Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本型別、pojo,Executor通過 Mapped Statement在執行sql後將輸出結果對映至java物件中,輸出結果對映過程相當於jdbc程式設計中對結果的解析處理過程。
- 開發環境
引入log4j列印mybatis執行sql的日誌資訊
mybatis-3.2.2.jar mybatis核心包
mysql-connector-java-5.1.28-bin.jar mysql jdbc驅動
junit-4.9.jar 單元測試
# mybatis依賴包,在mybatis.zip中提供
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
- 引入DTD檔案提示
增加:
- 引入log4j列印SQL語句
在classpath中建立一個名叫log4j.properties的檔案,內容如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t]
- 建立核心配置檔案sqlMapConfig.xml
---- 1. 配置事務
JDBC直接使用jdbc的事務
MANAGED 容器管理事務,mybatis 什麼都不要做。
---- 2. 資料來源DataSource
UNPOOLED 非池化的
POOLED 池化的
JNDI 方式
---- 3.核心配置檔案 sqlMapConfig.xml
<?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="test">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/chat?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
這就是mybatis的一個典型的配置檔案。在這個配置檔案中,我們可以清楚得看到一些關鍵資訊。
第一,有一個environments這個元素,在這個元素裡面配置的是一個一個的environment元素,每一個environment元素有一個id做為名字,
而environments元素上面有一個default屬性,引用environment元素的名稱,很容易想象出他們之間的關係。在environments裡面可以定義多個enviroment元素,使用default屬性指定一個預設的environment。而在environment裡面,定義了一組資料庫相關的東西,包括transactionManager,這個元素代表著怎麼去管理事務,而下面的dataSource就很明顯了,代表連線資料庫的相關資訊。在這裡,dataSource有一個屬性type,這裡我們寫的是POOLED,很明顯,使用連線池來做mybatis的連線提供。在dataSource裡面,配置了四個屬性,做為資料庫連線資訊配置
- POJO物件
public class TUser {
private int id;
private String name;
private Integer age;
private Integer roleId;
//此處省略getter/setter方法
}
- 建立對映檔案 TUserMapper.xml
在mybatis中,需要自己去控制sql,所以我們的配置檔案會像下面這樣。在User的同級包下,新增一個XML檔案,起名為UserMapper.xml,代表這個檔案是User物件的對映檔案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.feian.pojo">
<select id="find" resultType="com.feian.pojo.TUser">
select * from t_user
</select>
</mapper>
- 在sqlMapConfig.xml 宣告TUserMapper.xml
<!-- 宣告xml檔案 -->
<mappers>
<mapper resource="com/feifan/pojo/TUserMapper.xml" />
</mappers>