1.先看一个mybatis最简单的Demo

        String resource = "mybatis-config.xml";
        //1.流形式读取mybatis配置文件
        InputStream stream = Resources.getResourceAsStream(resource); 
        //2.通过配置文件创建SqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(stream);
        //3.通过SqlSessionFactory创建sqlSession
        SqlSession session = sessionFactory.openSession();
        //4.通过SqlSession执行Sql语句获取结果
        List<User> userList = session.selectList("selectAll");
        System.out.println(userList.size());

1.通过InputStream获取mybatis的配置文件

2.通过SqlSessionFactoryBuilder创建SqlSessionFactory

3.通过SqlSessionFactory创建一个SqlSession

4.通过SqlSession执行Sql语句并获取结果

那么接下来先来了解下SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession都是什么,是怎么工作的?

一、SqlSessionFactoryBuilder解析

由类名可知SqlSessionFactoryBuilder是SqlSessionFactory的构造类,而SqlSessionFactory又是SqlSession的工厂接口,SqlSession从字面意思可知是sql会话接口;

所以SqlSessionFactoryBuilder可定义为Sql会话工厂构造类,顾名思义此类的作用就是创建SqlSessionFactory用的

话不多说,代码写贴为敬

 1 package org.apache.ibatis.session;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.Reader;
 6 import java.util.Properties;
 7 import org.apache.ibatis.builder.xml.XMLConfigBuilder;
 8 import org.apache.ibatis.exceptions.ExceptionFactory;
 9 import org.apache.ibatis.executor.ErrorContext;
10 import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
11 
12 public class SqlSessionFactoryBuilder {
13 
14 //方法1
15   public SqlSessionFactory build(Reader reader) {
16     return build(reader, null, null);
17   }
18 
19 //方法2
20   public SqlSessionFactory build(Reader reader, String environment) {
21     return build(reader, environment, null);
22   }
23 
24 //方法3
25   public SqlSessionFactory build(Reader reader, Properties properties) {
26     return build(reader, null, properties);
27   }
28 
29 //方法4
30   public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
31     try {
32       XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
33       return build(parser.parse());
34     } catch (Exception e) {
35       throw ExceptionFactory.wrapException("Error building SqlSession.", e);
36     } finally {
37       ErrorContext.instance().reset();
38       try {
39         reader.close();
40       } catch (IOException e) {
41         // Intentionally ignore. Prefer previous error.
42       }
43     }
44   }
45 
46 //方法5
47   public SqlSessionFactory build(InputStream inputStream) {
48     return build(inputStream, null, null);
49   }
50 
51 //方法6
52   public SqlSessionFactory build(InputStream inputStream, String environment) {
53     return build(inputStream, environment, null);
54   }
55 
56 //方法7
57   public SqlSessionFactory build(InputStream inputStream, Properties properties) {
58     return build(inputStream, null, properties);
59   }
60 
61 //方法8
62   public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
63     try {
64       XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
65       return build(parser.parse());
66     } catch (Exception e) {
67       throw ExceptionFactory.wrapException("Error building SqlSession.", e);
68     } finally {
69       ErrorContext.instance().reset();
70       try {
71         inputStream.close();
72       } catch (IOException e) {
73         // Intentionally ignore. Prefer previous error.
74       }
75     }
76   }
77     
78 //方法9
79   public SqlSessionFactory build(Configuration config) {
80     return new DefaultSqlSessionFactory(config);
81   }
View Code

相关文章: