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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值