1. 程式人生 > >Mybatis配置學習

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>