Mybatis和数据库

 

            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");    
			
	    SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
	        
	    SqlSession session= sqlSessionFactory.openSession();
	        
	    UserMapper mapper  =session.getMapper(UserMapper.class);

1.获取Mybatis配置文件

            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

  1. 调用Resourse类的getResourseAsStream(String resourse)方法,其中参数为"mybatis-config.xml",是mybatis的配置文件。
  2. getResourseAsStream(String resourse)方法调用同一个类中getResourseAsStream(ClassLoader loader,String resourse)方法。
  3. getResourseAsStream(ClassLoader loader,String resourse)方法中调用ClassLoader类的getResourseAsStream(String resourse,ClassLoader loader)方法。
  4. getResourseAsStream(String resourse,ClassLoader loader)方法调用同一个类中的getResourceAsStream(String resource, ClassLoader[] classLoader)方法。该方法中对传入的Classloader数组进行遍历,对每一个classloader调用getResourceAsStream(String resourse)方法获取InputStream的实例。

2.获取SqlSessionFactory对象

            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);

  1. 新建SqlSessionFactoryBuilder对象。
  2. 通过SqlSessionFactoryBuilder调用build(InputStream inputStream)方法。
  3. build(InputStream inputStream)调用同一个类中的build(InputStream inputStream, String environment, Properties properties)方法。
  4. build(InputStream inputStream, String environment, Properties properties)方法中新建一个XMLConfigBuilder类的对象parser。
  5. 通过parser调用parse()方法解析is,返回configuration。
  6. parse()方法中调用parseConfiguration(XNode root)方法,解析获取配置文件的每一个标签信息。
  7. 通过SqlSessionFactory类的build(Configuration config)方法,把获取到的配置信息封装到DefaultSqlSessionFactory中。

3.获取SqlSession对象

            SqlSession session= sqlSessionFactory.openSession();

  1. 调用sqlSessionFactory的openSession()方法。
  2. openSession()方法调用同一个类中的openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)方法。
  3. openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)方法中创建了Transaction对象,通过configationd的newExecutor(Transaction transaction, ExecutorType executorType)方法获取Executor对象,最后创建了DefaultSqlSession对象。

4.获取mapper

	    UserMapper mapper  =session.getMapper(UserMapper.class);

  1. 调用session的getMapper(Class<T> type)方法。
  2. getMapper(Class<T> type)方法中调用Configuration类的getMapper(Class<T> type, SqlSession sqlSession)方法。
  3. getMapper(Class<T> type, SqlSession sqlSession)中调用MapperRegistry类的getMapper(Class<T> type, SqlSession sqlSession)方法。
  4. getMapper(Class<T> type, SqlSession sqlSession)方法中调用MapperProxyFactory<T>类的newInstance(SqlSession  sqlSession)方法。
  5. newInstance(SqlSession  sqlSession)方法创建MapperProxy<T>对象mapperProxy,再调用同一个类的newInstance( MapperProxy<T> mapperProxy)方法,返回mapper。

版权声明:本文为HOOHV原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。