mybatis执行原理

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis框架主要完成的是以下2件事情:

根据JDBC规范建立与数据库的连接。
通过反射打通Java对象与数据库参数交互之间相互转换的关系。
  MyBatis框架是一种典型的交互式框架,先准备好交互的必要条件,然后构建一个交互的环境,在交互环境中划分会话,在会话中与数据库进行交互数据。

1 MyBatis主要的类

  • Configuration MyBatis所有的配置信息都维持在Configuration对象之中。
  • SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
  • Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
  • ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
  • ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
  • TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
  • MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封装,
  • SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql 表示动态生成的SQL语句以及相应的参数信息
      以上几个类在SQL操作中都会涉及,在SQL操作中重点关注下SQL参数什么时候写入和结果集怎么转换为Java对象,这两个过程正好对应的类是PreparedStatementHandler和ResultSetHandler类。
      在这里插入图片描述

2 执行流程

主要代码为:

//读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactoryBuilder,根据sqlSessionFactoryBuilder构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过sqlSessionFactory开启sqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
	//获取接口
	BlogMapper mapper = session.getMapper(BlogMapper.class);
	//执行sql语句
	Blog blog = mapper.selectBlog(101);
	} finally {  
	//关闭资源
		session.close();
	}

其中包含3个步骤:

步骤一、初始化加载并XML配置文件,SqlSessionFactoryBuilder根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例配置文件:分两大类型,即 mybatis-config.xml 和 Mapper 接口对应的 SQL 语句配置MyBatis 规定所有的 Mapper 需要定义成接口的形式,这主要是配合 jdk 自带的动态代理机制

步骤二、创建SqlSession:SqlSession 是 MyBatis 对外提供的执行数据库操作的统一接口,表示一次数据库会话,session与connection的粗略理解:connection是个物理概念,session是逻辑概念。每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用(连接池)。
数据源与连接池与连接

  • 1、MyBatis数据源DataSource对象的创建发生在MyBatis初始化的过程中
  • 2、上述代码中,前面5步都不会触发connection的创建,只有真正执行的时候,才会通过openConnection来创建connection
  • 3、MyBtis默认数据源类型:POOLED使用连接池, UNPOOL不使用连接池, JNDI使用JNDI实现的数据源,第三方数据源:如C3P0等

步骤三、sql执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值