MyBatis框架

一,框架概念

        框架(Framework)是一个提供了可重用的公共结构的半成品。它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是,提供了可重用的设计。

        框架的另一个层面的含义是:框架使混乱的东西变得结构化。莎士比亚说:”一千个人眼中有一千个哈姆雷特“。同样,如果没有框架的话,一千个人将写出一千种Servlet+JavaBean+JSP的代码。而框架保证了程序结构风格统一。从企业的角度来说,降低了培训成本和软件的维护成本。

        框架像它的名字一样,是一个框,那框就是要有一些约束,所以在学习框架很多时候都需要按照人家规定好的步骤按部就班去操作;是一个架,是框架中包含了很多设计模式和基础功能,将应用程序支撑起来。

为什么学框架?

我们举个例子:如何制作一份看上去具有专业水准的PPT文档呢?

        一个简单的方法就是使用 Microsoft Power Point 的模板功能。

        使用模板新建出来的文档已经有了一个PPT的”架子“,我们只需要把必要的信息像”做填空题“一样填写进去就可以了。

我们来思考一下,使用ppt模板制作ppt有哪些好处呢?

        a.不用考虑布局,排版等问题,提高了效率

        b.可以专心于ppt的内容上,使ppt的质量更有保障

        c.新手也可以很快速的制作很专业的ppt

而使用框架来构建项目也是基于这样的考虑。当确定使用哪个技术框架后,就已经有了一个”半成品“,然后在这个半成品里填上内容,工作就完成了。这就是框架的优势:

        a.不用在考虑公共问题,框架都已经帮我们做好了

        b.可以专心于业务的实现,保证核心业务逻辑的开发质量

        c.结构统一,便于学习和维护

        d.框架中集成了前人的经验,可以帮助新手写出稳定,性能优良而且结构优美的高质量程序。

        e.缩短我们开发的时间与周期

框架的使用场合

但是框架也有它的弊端,不是任何时候都适合使用框架的。

框架的维护需要很大的人力,财力。如果不是特别大规模,特别复杂的项目,建议还是不要使用 框架。

二,MyBatis框架

1,MyBatis基本信息

        MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

        MyBatis是一个基于Java的数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。

2.MyBatis与传统JDBC比较

3.MyBatis的优点

A.简单易学

===MyBatis本身小巧简单,没有任何第三方依赖,易于学习,易于使用。

B.基于SQL语法,灵活

===MyBatis不会 对 应用程序或者数据库的现有设计强加任何影响。SQL写在xml里,便于统一管理和优化,通过SQL语句可以满足操作数据库的所有需求。

C.解除SQL与程序代码的耦合

===通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

D.提供映射标签,支持对象与数据库的orm字段关系映射

E.提供对象关系映射标签,支持对象关系组建维护

F.提供xml标签,支持编写动态sql

4,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。我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存。

三,MyBatis工作流程

 1.加载配置并初始化:

                首先在MyBatis 启动的时候我们要去解析配置文件,包括全局配置文件和映射器配置文件, 全局配置文件里面包含了我们怎么控制MyBatis 的行为,我们会把它们解析成一个Configuration 对象。 映射器配置文件包含了我们要对数据库下达的指令,也就是我们的SQL 信息。然后一个SQL节点会被对应解析成一个MappedStatement对象存储在内存中。 接下来就是我们操作数据库的接口,它在应用程序和数据库中间, 代表我们跟数据库之间的一次连接:这个就是SqlSession 对象。 我们要获得一个SqlSession对象或者说是获得一次连接会话, 必须有一个会话工厂SqlSessionFactory 。 SqlSessionFactory 里面又必须包含我们的所有的配置信息,所以我们会通过一个FactoryBuilder 来创建工厂类。

2.接收调用的请求:

        接收SQL的ID 和传入的参数对象

3.处理操作请求:

    A.根据SQL的ID查找对应的MappedStatement对象。
    
    B.根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
​
    C.获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
​
    D.根据MappedStatement对象中的结果映射配置,对得到的执行结果进行转换处理,并得到最终的处理结果。
​
    E.释放连接资源。

4.返回最终的处理结果

我们知道MyBatis 是对JDBC 的封装,也就是意味着底层一定会出现JDBC 的一些核心对象,比如执行SQL 的Statement,结果集ResultSet。在Mybatis 里面,SqlSession 只是提供给应用一个接口,还不是SQL 的真正的执行对象。 其实SqlSession内部是持有了一个Executor 对象,用来封装对数据库的操作。在执行器Executor 执行query 或者update 操作的时候我们创建一系列的对象,来处理参数、执行SQL、处理结果集,这里我们把它简化成一个对象:StatementHandler,(但是Executor ,StatementHandler我们都操作不到,底层源码里可以看到)以上这些就是MyBatis 主要的工作流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值