1.mybatis-configs.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">
<!-- mybatis 核心配置 -->
<configuration>
<!-- 配置初始化环境(连接) -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/><!-- JdbcTransaction -->
<!-- 使用mybatis自带连接池 -->
<dataSource type="POOLED"><!-- PooledDataSource -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///blog"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/AuthorMapper.xml"/>
</mappers>
</configuration>
2.测试类TestBaseWithXml
package com.cy.test;
import java.io.InputStream;
import java.sql.Connection;
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 org.junit.Before;
import org.junit.Test;
public class TestBaseWithXml {
//SqlSessionFactory是一个接口
protected SqlSessionFactory sqlSessionFactory;
@Before //读取配置信息
public void init()throws Exception {
String resource = "mybatis-configs.xml";
InputStream inputStream =
Resources.getResourceAsStream(resource);
sqlSessionFactory=
new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testSqlSessionFactory() {
System.out.println(sqlSessionFactory);
//DefaultSqlSessionFactory@458c1321 默认是 DefaultSqlSessionFactory
//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@458c1321
//Session对象指向的是谁? DefaultSqlSession@2f943d71
SqlSession session=sqlSessionFactory.openSession();
//从哪里获取的连接?PooledDataSource连接池对象
//Connection对象指向谁? Mysql驱动中的一个连接对象
Connection conn=session.getConnection();
System.out.println(conn);
}
}
3.程序分析
sqlSessionFactory=
new SqlSessionFactoryBuilder().build(inputStream);
sqlSessionFactory指向谁??
2.SqlSession session=sqlSessionFactory.openSession();
session指什么?
3.Connection conn=session.getConnection();
conn连接??
流程总结:
- 通过IO读取配置文件
- 解析IO数据并进行封装(所有信息都会存储到Configuration对象)
- 基于配置对象创建SqlSessionFactory对象
1)封装了连接获取过程?(Executor->JDBCTransactionConnection)
2)封装了Statement对象创建过程?(connection)
3)封装了sql的发送过程,参数的处理过程,结果的映射过程。