[TOC]
# 1-1MyBatis的配置
```
<?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>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="false"/>
<!--<setting name="logImpl" value="STDOUT_LOGGING"/> <!– 打印日志信息 –>-->
</settings>
<typeAliases>
<typeAlias type="com.luo.dao.UserDao" alias="User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/> <!--事務管理類型-->
<dataSource type="POOLED">
<property name="username" value="luoxn28"/>
<property name="password" value="123456"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.1.150/ssh_study"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
```
# 1-2MyBatis的主要成員
* Configuration MyBatis所有的配置信息都保存在Configuration對象之中,配置文件中的大部分配置都會存儲到該類中
* SqlSession 作為MyBatis工作的主要頂層API,表示和數據庫交互時的會話,完成必要數據庫增刪改查功能
* Executor MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護
* StatementHandler 封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數等
* ParameterHandler 負責對用戶傳遞的參數轉換成JDBC Statement 所對應的數據類型
* ResultSetHandler 負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合
* TypeHandler 負責java數據類型和jdbc數據類型(也可以說是數據表列類型)之間的映射和轉換
* MappedStatement MappedStatement維護一條<select|update|delete|insert>節點的封裝
* SqlSource 負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,并返回
* BoundSql 表示動態生成的SQL語句以及相應的參數信息
以上主要成員在一次數據庫操作中基本都會涉及,在SQL操作中重點需要關注的是SQL參數什么時候被設置和結果集怎么轉換為JavaBean對象的,這兩個過程正好對應StatementHandler和ResultSetHandler類中的處理邏輯。
# 1-3創建SqlSessionFactory建造者對象
首先會創建SqlSessionFactory建造者對象,然后由它進行創建SqlSessionFactory。這里用到的是建造者模式,建造者模式最簡單的理解就是不手動new對象,而是由其他類來進行對象的創建。
```
// SqlSessionFactoryBuilder類
public SqlSession getSqlSession() throws IOException {
String resource = "resource.xml";
Reader reader = Resources.getResourceAsReader(resource);
//SqlSessionFactory 數據庫會話對象工廠 。 創建數據庫會話對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
```