• mybatis是什么

    在说mybatis原理之前,我们有必要知道,mybatis到底是个什么东西。mybatis是一个持久层的框架。是一个不完全的ORM框架。因为它需要由程序员自己去写sql语句。但是它也可以将对象和数据库表进行输入和输出映射。

    相对于hibernate框架来说,mybatis学习起来更加的简单,学习成本也相对较低。可以让程序员将自己的精力放在sql语句上,由于在mybatis中sql语句单独存放在xml文件中。对于sql语句的修改和优化也比较方便,适用于需求变化较多的项目。基于国内程序员对于hibernate掌握程度参差不齐的现状,所以互联网电商项目多使用mybatis作为持久层框架。以便于提高数据库访问的速度。

  • mybatis的框架原理

    mybatis 框架整体的话,先上一张图吧。然后通过这张图对于mybatis的框架原理进行一下展开。

    

    我们知道,持久层的工作就是和数据库打交道,将我们的数据从系统中存入数据库,或者是将数据库中的内容取出。这也是持久层框架干的事情。在mybatis中,mapped statement(底层封装对象)和Executor(执行器),对用户是透明不可见的。也就是说,我们用户不需要知道我们传入的各种参数是如何被mapped statement 进行封装成为一个可以被数据库是别的sql语句的参数的。也不用知道Executor是如何在sqlSession内部通过一系列的执行去操作数据库的。

    我们需要做的是,创建一个sqlSession(链接数据库的会话)的对象,通过这个sqlSession接口提供给程序员的一些方法,传入相应的映射文件(这个文件包含有我们要执行的sql语句)及对应的参数。然后在mybatis内部,将传入的映射文件的内容和传入参数进行解析,然后通过执行器去发送sql语句。再将得到的结果通过底层封装对象进行封装。返回给sqlSession方法的调用方。

    这里需要注意一个地方:sqlSession默认情况下是不会自动提交事务的,所以,在我们跟数据库链接的时候,如果需要提交事务,需要手动的进行提交。而且我们在手动提交sql语句的时候,是需要和数据库建立连接的。那么问题来了,我们的sqlSession这个会话是怎么来的呢?它又是在什么时候和数据库建立了链接呢?

    在我们的mybatis中,有一个会话工厂,它是一个全局只需要一个的工厂。它的作用就是创建sqlsession。和数据库链接的数据源对象就是通过sqlSessionFactory这个工厂进行的创建时,赋值给了sqlSession这个会话对象的。所以一般sqlSessionFactory一般都是配置为单例的。而我们的整个mybatais的所有配置,并不是由sqlSessionFactory去进行读取的,根据单一职责原则,在mybatis中,是由SqlSessionFactoryBuilder去进行读取的,当然,它读取的配置信息是有很多的,将mybatis的运行环境信息读取完成之后,然后创建一个SqlSessionFactory。由于这些读取环境不是mybatis的核心,我们的图上就没有体现。

    那么,这些配置文件写在哪了呢?我们一般写在SqlMapConfig.xml这个文件中。(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境。

     那么,mybatis在运行的时候是怎么执行的呢呢?

    mybatis的执行流程

    首先呢,我们配置mybatis的配置文件,sqlmapConfig.xml这个文件(虽然名称不固定,但是这是约定成俗的写法)。

    然后,通过配置文件,加载mybatis的运行环境,创建SqlSessionFactory的会话工厂(按照单例方式创建,多例也可以,不过浪费资源严重)。

    接下来,通过会话工厂(SqlSessionFactory)去创建会话(SqlSession)。这个接口是线程不安全的,所以建议应用在方法体内。

    剩下的就是,调用sqlSession的方法去操作数据库了。操作完成后,进行下事务的commit()的方法。然后释放资源关闭sqlSession。

      

mybatis入门-框架原理的更多相关文章

  1. 【mybatis深度历险系列】mybatis的框架原理+入门程序解析

    在前面的博文中,小编介绍了springmvc的相关知识点,在今天这篇博文中,小编将介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和 ...

  2. mybatis入门(一):jdbc的缺点

    mybatis的基础内容 1.mybatis的框架原理 2.mybatis开发dao两种方法: a.原始dao开发方法(程序需要编写dao接口和dao实现类) b.mybatis的mapper接口(相 ...

  3. MyBatis1:MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  4. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  5. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  6. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  7. mybatis入门_mybatis基本原理以及入门程序

    一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...

  8. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  9. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

随机推荐

  1. linux shell命令之 xargs

    1  简介 xargs是一条Unix和类Unix操作系统的常用命令.它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题. 2 特点 (1) 处理文件/目录名中的空格 find ...

  2. Spring--Bean scope

    singleton, prototype,request, session, global session bean.xml: <?xml version="1.0" enc ...

  3. js Date 日期格式化(转)

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...

  4. IT技术网站汇总

    首先是比较著名的博客型的网站!一般来说在国外比较著名的博客基本上都是比较有影响力发起的或者建立的经常发布一些比较有思考力深入分析的文章! 博客媒体网站 1.www.ArsTechnica.com 2. ...

  5. 一起学JUCE之Atomic

    Atomic功能是提供简单的类保持原始值,并且提供对其执行原子操作:Atomic是线程安全的,类型的实现比较简单,就是通过各种措施保证变量的操作达到原子操作,有一点需要注意Atomic使用的时候只支持 ...

  6. 直流电机驱动PWM频率(转)

    源:直流电机驱动PWM频率 1.没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系.一般的电机用14K就足够了.当然自需要简单的调速可以随便选. 如果电机转速比较高,感抗 ...

  7. ARM交叉编译工具链分类说明

    转载整理自:http://www.veryarm.com/cross-tools 从授权上,ARM交叉编译工具链分为免费授权版和付费授权版. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自 ...

  8. System.Web.UI.WebControls的Web服务器控件

    calendar[英][ˈkælɪndə(r)][美][ˈkæləndɚ]n.日历; 历法; 日程表; (一年之中的)重大事件(或重要日期)一览表; vt.把…记入日程表中; 把…列入表中; 为(文件 ...

  9. NodeMCU之旅(二):断线自动重连,闪烁连接状态

    事件监听器 NodeMCU采用了事件响应的方式.也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用. 注册事件监听器 wif.sta.eventMonReg() 开始监听 wifi ...

  10. magento1.x 运行在 php7 优惠券的问题

    diff --git app/code/core/Mage/Sales/etc/config.xml index 5bb43d7..7db62ca 100644 --- app/code/core/M ...