深度剖析Mybatis 中的数据读写

数据读写的本质

不管是哪种ORM框架,数据读写其本质都是对JDBC的封装,其目的主要都是简化JDBC的开发流程,进而让开发人员更关注业务。下面是JDBC的核心流程:

  1. 注册 JDBC 驱动(Class.forName("XXX");)

  2. 打开连接(DriverManager.getConnection("url","name","password"))

  3. 根据连接,创建 Statement(conn.prepareStatement(sql))

  4. 设置参数(stmt.setString(1, "wyf");)

  5. 执行查询(stmt.executeQuery();)

  6. 处理结果,结果集映射(resultSet.next())

  7. 关闭资源(finally)

Mybatis也是在对JDBC进行封装,它将注册驱动打开连接交给了数据库连接池来负责,Mybatis支持第三方数据库连接池,也可以使用自带的数据库连接池;创建 Statement 和执行查询交给了StatementHandler来负责;设置参数交给ParameterHandler来负责;最后两步交给了ResultSetHandler来负责。

Executor内部运作过程

测试方法org.apache.ibatis.binding.BindingTest#shouldFindThreeSpecificPosts

下面是一个简单的数据读写过程,我们在宏观上先来了解一下每一个组件在整个数据读写上的作用:

图片

Mybatis的数据读写主要是通Excuter来协调StatementHandler、ParameterHandler和ResultSetHandler三个组件来实现的:

  • StatementHandler:它的作用是使用数据库的Statement或PrepareStatement执行操作,启承上启下作用;

  • ParameterHandler:对预编译的SQL语句进行参数设置,SQL语句中的的占位符“?”都对应BoundSql.parameterMappings集合中的一个元素,在该对象中记录了对应的参数名称以及该参数的相关属性

  • ResultSetHandler:对数据库返回的结果集(ResultSet)进行封装,返回用户指定的实体类型;

StatementHandler

StatementHandler类图

图片

RoutingStatementHandler

通过StatementType来创建StatementHandler,使用静态代理模式来完成方法的调用,主要起到路由作用。它是Excutor组件真正实例化的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值