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 }