1、定义接口Mapper 和方法,用来调用数据库操作。

Mapper 接口操作数据库需要通过代理类。

2、定义配置类对象Configuration。

3、定义应用层的API SqlSession。它有一个getMapper()方法,我们会从配置类Configuration 里面使用Proxy.newProxyInatance()拿到一个代理对象MapperProxy。

4、有了代理对象MapperProxy 之后,我们调用接口的任意方法,就是调用代理对象的invoke()方法。

5、代理对象MapperProxy 的invoke()方法调用了SqlSession 的selectOne()。

6、SqlSession 只是一个API,还不是真正的SQL 执行者,所以接下来会调用执行器Executor 的query()方法。

7、执行器Executor 的query()方法里面就是对JDBC 底层的Statement 的封装,最终实现对数据库的操作,和结果的返回。

基于我们总结的这个框架的主要工作流程,接下来我们就要动手去写这个框架了。

我们先给它起个名字叫MeBatis。

手写自己的MyBatis框架-操作流程相关推荐

  1. 手写自己的MyBatis框架-SqlSession

    我们已经分析了MeBatis 的主要对象和操作流程,应该从哪里入手? 当我们在psvm 操作的时候,第一个需要的对象是SqlSession.所以我们从应用层的接口SqlSession 入手. 那么我们 ...

  2. 手写自己的MyBatis框架-Executor

    到了sqlSession 的selectOne()方法,这里我们要去调用Executor 的query()方法,这个时候我们必须传入SQL 语句和参数(根据statementId 获取). 问题来了: ...

  3. 手写自己的MyBatis框架-这个框架需要解决什么问题?

    老王给我看了一段JDBC 的代码: rs.close(); stmt.close(); conn.close(); 1)它需要实现对连接资源的自动管理,也就是把创建Connection.Stateme ...

  4. 手写自己的MyBatis框架-V2.0 可优化之处

    1 .在ResultSetHandler 中, 类型处理都是写死的, 能不能创建一个TypeHandler,把这些关系维护起来,处理所有类型的转换关系和自定义类型: 2.只实现了@Select 的注解 ...

  5. 手写自己的MyBatis框架-V2.0配置文件

    创建了全局配置文件mybatis.properties,存放SQL 连接信息.缓存开关.插件地址.Mapper 接口地址. 全局配置文件在Configuration 配置类的构造器中解析.

  6. 手写自己的MyBatis框架-核心对象

    1.存放参数和结果映射关系.存放SQL 语句,我们需要定义一个配置类: 2.执行对数据库的操作,处理参数和结果集的映射,创建和释放资源,我们需要定义一个执行器: 3.有了这个执行器以后,我们不能直接调 ...

  7. 手写自己的MyBatis框架-支持插件

    定义了一个@Intercepts 注解,目前还只能拦截Executor 的方法,所以属性只要配置方法名称. 定义Interceptor 接口,是所有自定义插件必须实现的接口. 定义Intercepto ...

  8. 手写自己的MyBatis框架-支持查询缓存

    定义了一个CachingExecutor , 当全局配置中的cacheEnabled=true 时,Configuration 的newExecutor()方法会对SimpleExecutor 进行装 ...

  9. 手写自己的MyBatis框架-支持注解配置SQL

    定义了一个@Select 注解,加在方法上. 在Configuration 构造函数中的parsingClass() 中解析, 保存在mappedStatements 中(一个HashMap). 注意 ...

最新文章

  1. 什么是区块链钱包?区块链钱包如何运作?
  2. 从Windows计算机上完全删除iTunes和其他Apple软件
  3. mysql定义条件和处理_mysql sql存储过程条件定义与处理
  4. Python中浅拷贝和深拷贝的理解与研究
  5. 多个蓝牙缺陷可使攻击者假冒合法设备
  6. 几种在Linux下查询外网IP的办法(转)
  7. 从0开始学习C#第二天
  8. unix环境高级编程(第三版)-读书笔记1
  9. 数字电视 frontend tuner demod
  10. 2.1简单计算问题的求解
  11. 利用red5搭建一个简单的流媒体直播系统(ubuntu 12.10)
  12. STM32毕业设计题目大全
  13. canvas 画布标签
  14. pe结构分析之手工修复导入表
  15. J2SE:总结—基础很重要哈!
  16. 如何写出更优雅的代码——编程范式简述
  17. Java项目开发如何设计整体架构
  18. 如何批量OCR识别各类票据关键信息,导出为结构化格式数据
  19. 呀!原来这就是前端监控系统
  20. Deploy k8s(1.25)

热门文章

  1. [翻译:更新]Understanding Linux Network Internals - Table of Contents
  2. Java全套零基础视频教程,2019最新编程
  3. 零基础自学Java变成能成吗?前景如何
  4. 通过lseek产生空洞文件
  5. UVALive 7143 Room Assignment(组合数学+DP)(2014 Asia Shanghai Regional Contest)
  6. C-C Primer Plus阅读笔记
  7. Visual C# 2008+SQL Server 2005 数据库与网络开发--13.1.3 简单记事本程序菜单设计
  8. xajax中的中文乱码问题
  9. 【大话数据结构算法】归并排序
  10. bind()、call()、apply()理解及用法