一、什么是Mybatis ?

1、MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
2、MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
3、MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

我个人认为Mybatis可以从以下三个方面去看 :

Mybatis宏观模块 :

1,Mybatis环境配置信息模块对应于(mybatis-config.xml)中相应的配置信息

2,Mapper接口信息和mapper.xml文件(也可以是注解)方法于sql绑定问题

3,最后是sql的执行,我们调用相应的接口方法如何被执行

Mybatis核心类:
SqlSessionFactory:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或通过Java的方式构建出 SqlSessionFactory 的实例。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,建议使用单例模式或者静态单例模式。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库就配置多个环境分别对应一个SqlSessionFactory。

SqlSession:SqlSession是一个接口,它有2个实现类,分别是DefaultSqlSession(默认使用)以及SqlSessionManager。SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession。

Executor:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement)。以上三个就是主要的Executor。通过下图可以看到Mybatis在Executor的设计上面使用了装饰器模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存。

**MappedStatement:**MappedStatement就是用来存放我们SQL映射文件中的信息包括sql语句,输入参数,输出参数等等。一个SQL节点对应一个MappedStatement对象。

执行过程

【Mybatis框架个人理解】相关推荐

  1. 阿里巴巴的持久层抛弃了hibernate,采用的却是MyBatis框架。。。

    最近一直在研究MyBatis源码,作为国内经常使用的持久层框架,其内部代码的设计非常优秀.比如在开发过程中,有能力对框架进行深度的定制化开发,解决BUG也更加得心应手!另外学习开发者是如何设计高扩展性 ...

  2. Java面试之五大框架的理解

    五大框架(springMVC,struts2,spring,mybatis,hibernate) 说说你对springMVC框架的理解? 简要口述(如果感觉说的少可以在完整答案里面挑几条说) Spri ...

  3. spring mvc + mybatis 框架搭建 ( idea + gradle)

    spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...

  4. Hibernate学习总结【比较与Mybatis框架之间的区别】

    经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...

  5. MyBatis框架学习 DAY_03:如何解决无法封装问题 / 一对一关联查询 / 一对多关联查询

    1. 通过查询时自定义别名的方式解决名称不一致而导致的无法封装数据的问题 假设,向用户组数据表(t_group)表中插入一些测试数据: INSERT INTO t_group (name) VALUE ...

  6. MyBatis框架学习 DAY_02:使用XML配置文件/多参数问题 / FOREACH /IF / #{}和${} / 创建SSM框架流程

    XML文件配置SQL 1. 使用XML文件配置SQL语句 2. 关于多参数的问题 2. 练习 3. 动态SQL -- foreach 4. 动态SQL -- if 5. 关于#{}和${}格式的占位符 ...

  7. 自己手写一个Mybatis框架(简化)

    继上一篇手写SpringMVC之后,我最近趁热打铁,研究了一下Mybatis.MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码.本 ...

  8. 从 0 开始手写一个 Mybatis 框架,三步搞定!

    最近研究了一下Mybatis,给大家磕叨磕叨,MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码.本文完成的Mybatis功能比较简 ...

  9. mybatis框架--学习笔记(上)

    使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...

最新文章

  1. jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)
  2. Java集合篇:ArrayList详解
  3. java新闻分页_新闻实现分页显示
  4. 区位码怎么知道点阵里的起始点_自身免疫疾病的GAPS起始饮食改良版
  5. Java DataOutputStream writeChars()方法及示例
  6. react 添加less预处理语言
  7. 一般处理程序(ashx)和页面处理程序(aspx)的区别
  8. js,jquery,css,html5特效
  9. 获取线程号 gettid()【原创】
  10. 机器学习 --- 3. 贝叶斯怎么想?(转)
  11. Web SQL本地数据库(SQLLite)
  12. 数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】
  13. android极光推送问题,极光推送- 常见问题 - 极光文档
  14. html a4纸张大小像素,CSS设置A4纸张大小
  15. 【计算机网络】TCP糊涂窗口综合症
  16. Mac系统中 alt+insert怎么操作?
  17. SAP 标准成本、计划成本、目标成本、实际成本解析
  18. JAVA并发容器-ConcurrentHashMap 1.7和1.8 源码解析
  19. 在dhcp服务器上新建一个作用域需要定,在DHCP服务器上创建一个IP地址作用域,它的名称为“offi - 问答库...
  20. 云主机和物理机有什么区别?

热门文章

  1. Symbolic link and hard link的区别(linux)
  2. 金山文档手机app服务器异常,手机金山文档出现这个文件大家有没有遇到过,在线求解谢谢了。{...
  3. Filter Solutions入门
  4. TextView设置字体颜色的几种方法简记
  5. Linux简介及Linux学习路线图
  6. 天象集团UI培训:如何提升画面的设计感?图文排版的小技巧
  7. 纯工具落伍,开发者需要一站式移动开发服务平台
  8. 终于,朋友圈要清净些了
  9. Android Bitmap详解
  10. 金刚石图案java实现_案例1 绘制金刚石图案算法.ppt