小型、简单系统

小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型。它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删查改)应用程序来说可能根本就不存在。MyBatis之所以非常适合于小型应用程序,有3个原因。

第一,MyBatis本身就很小并且简单。它不需要服务器或者其他任何类型的中间件。根本不需要任何额外的基础设施。MyBatis也没有任何第三方依赖。MyBatis的最简安装只需 要2个JAR文件,总计不过375KB。除了需要配置几个SQL映射文件外,MyBatis不需要进行任何其他安装,因此只需要几分钟时间就可以拥有一个可工作的持久层了。

第二,MyBatis不会对应用程序或者数据库的现有设计强加任何影响。因此,如果你有一个小型系统,且己经部分实现或者甚至己经发布了,那么依然可以轻松地重构持久层以使用MyBatis。 因为MyBatis很简单,所以它根本不会使得应用程序的架构过分复杂。而如果使用对象/关系映射工具或者代码生成工具,由于它们都对应用程序或数据库的设计做了某些假设,因此它们不可能 对应用程序的架构毫无影响。

最后,只要有过软件开发的经验,相信你就不会怀疑,任何一个小软件都几乎不可避免地有 一天会成长为一个大软件。所有成功的软件都有进一步成长的趋势。这是一件好事,而我们接下 来想说的就是,MyBatis同样非常适合于大型系统,它甚至可以扩展以满足企业级应用程序的需要。

MyBatis之于大型、企业级系统

MyBatis当初就是为企业级应用程序而设计的。最重要的是,MyBatis在这个领域比之其他解决方案有着大量的优点。MyBatis最初的创建者都只有从大型应用到企业级应用程序系统的开发经 验。这些系统通常都涉及不止一个数据库,且所有这些数据库都是不可控的。之前中我们讨论了各种类型的数据库,包括企业级数据库、私有数据库和遗留数据库。创建MyBatis框架一个很重要的原因就是针对这样的数据库。因此,MyBatis拥有许多适合于企业应用环境的特征。

其实MyBatis适用于大型系统中的第一个原因我们已经在其他地方说过了,不过这个原因的确很重要,所以我们再强调一下也不为过:MyBatis没有对数据库模型或对象模型的设计做任何假设。 不论你的应用程序中这两个模型之间是多么不匹配,MyBatis都能适用。况且,MyBatis没有对你的 企业级系统的架构做出任何假设。不论你对数据库是根据业务功能纵向划分,还是按照技术横向划分,MyBatis都允许高效地处理数据并将它整合到面向对象的应用程序中去。

第二点,MyBatis的某些特征使得它能够非常高效地处理大型数据集。MyBatis支持的行处理器使得它能够批处理超大型记录集(一次一条记录)。MyBatis也支持只获取某个范围 内的结果,这就使得你可以只获取那些你当前亟需的数据。例如,假设你有10 000条记录,但只 需要其中的第500条〜第600条,那么就可以轻松地仅获取这些记录。MyBatis支持驱动程序提示, 使得执行这样的操作非常高效。

最后一点,MyBatis允许你用多种方式建立从对象到数据库的映射关系。一个企业级系统只以一种模式工作的情况是非常少见的。许多企业级系统需要在白天执行事务性的功能,而在晚上执行批处理功能。MyBatis允许你将同一个类以多种方式映射,以保证每一种功能都能以最高效的方式执行。MyBatis同样支持多种数据获取策略。例如,可以选择对某些数据进行延迟加载,也可以 将一个复杂的对象图只用一条联合查询SQL语句就同时加载完毕,从而避免严重的性能问题。

我们有充足的理由说明,你几乎可以在任何系统中使用MyBatis。正如前面所介绍的, 像MyBatis这样一个框架能够使你的应用程序从架构级别上受益。本节就将讨论这些益处以及使这些益处成为可能的iBATIS特征。

简单性

MyBatis被广泛认为是当今可用的最简单的持久化框架之一。简单性的理念根植于MyBatis开发团队,它在MyBatis的所有开发目标中居于首位。这种简单性的取得是因为MyBatis直接构建于JDBC 和SQL之上。MyBatis对于Java开发人员来说非常简单,因为它除了不用编写那么多代码外,与JDBC的工作机制非常相像。几乎你知道的关于JDBC的一切都对iBATIS同样适用。几乎可以认为, MyBatis就是以XML的形式描述的JDBC代码。也就是说,MyBatis拥有许多JDBC所没有的架构级的优点,我们随后就将讨论这些优点。MyBatis对于数据库管理员以及SQL程序员来说也非常容易 理解。iBATIS配置文件几乎人人都能读懂,只要有SQL编程的经验。

生产效率

任何一个优秀的框架,其基本目的都是使得框架的使用者能够获得更高的生产效率。一般情况下,框架负责处理公共的任务,减少编写重复的样板代码,以及解决复杂的架构级的问题。 MyBatis在给开发人员带来更高的开发效率方面做得非常成功。在Java用户组所做的—案例中, MyBatis减少了持久层大约62%的代码量。之所以能减少如此多的代码量, 究其原因是开发人员再不需要编写繁琐的JDBC代码了。SQL语句仍然是硬编码的,不过就像你在前面小节中所看到的,SQL不是问题——问题在于JDBCAPI。

性能

性能这个话题无疑会引起框架开发人员、框架使用者以及商业软件开发商之间的一场激烈争论。事实是,从一个较低的层次来看这个问题,无疑所有的框架都会带来一定的性能损失。一般 来说,如果你比较硬编码的JDBC代码和MyBatis代码,做一个1 000 000次的for循环,就会发现 JDBC在性能上的确有一些优势。幸运的是,在现代应用程序开发中,以上这样的for循环带来的 性能损失并不重要。真正重要的是,你如何从数据库中获取数据,何时获取,获取的频率又是多少。例如,从数据库中动态地获取记录的分页查询之所以能大大提高应用程序的性能就在于,你不会将潜在的成千上万条记录从数据库中一次取出。同样地,使用像延迟加载这样的特征可以避免加载那些当前用例并不需要的数据。另一方面,如果你确定需要加载一份复杂的对象图,涉及来自多个表的大量数据,那么使用一条SQL语句就完成所有对象的加载显然可以大大提高效率。 MyBatis支持许多性能优化措施。就目前而言,最重要的是 要知道MyBatis总是能通过一种简单的方式来配置和使用,其性能与JDBC相当,甚至更好。另一 个需要重点考虑的问题就是,并不是所有的JDBC代码都是编写良好的。JDBCAP非常复杂,编 写正确的代码需要非常小心。不幸的是,大量的JDBC代码都编写得相当糟糕,因此从较低层次上看甚至还没有MyBatis工作得好。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型

MyBatis知多少(6)表现层与业务逻辑层

MyBatis知多少(7)持久层

MyBatis知多少(8)关系型数据库

MyBatis知多少(9)不同类型的数据库

MyBatis知多少(10)应用程序数据库

MyBatis知多少(11)企业数据库

MyBatis知多少(12)私有数据库

MyBatis知多少(13)MyBatis如何解决数据库的常见问题

MyBatis知多少(14)分散的数据库系统

MyBatis知多少(15)数据模型

MyBatis知多少(16)MyBatis映射

MyBatis知多少(17)MyBatis和JDBC

MyBatis知多少(18)MyBatis系统的更多相关文章

  1. MyBatis知多少(26)MyBatis和Hibernate区别

    iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...

  2. MyBatis知多少(26)调试

    这是很容易,同时与iBATIS的工作程序进行调试. iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们. Jakarta Commons日志记录(JCL). Log4J JDK 日 ...

  3. MyBatis知多少(25)动态SQL

    使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...

  4. MyBatis知多少(24)存储过程

    使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLO ...

  5. MyBatis知多少(23)MyBatis结果映射

    resultMap的元素是在MyBatis的最重要和最强大的元素.您可以通过使用MyBatis的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMap ...

  6. MyBatis知多少(22)MyBatis删除操作

    本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment, f ...

  7. MyBatis知多少(21)更新操作

    上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( ...

  8. MyBatis知多少(20)MyBatis读取操作

    上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT ...

  9. MyBatis知多少(19)MyBatis操作

    若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所 ...

随机推荐

  1. Moses在Ubuntu14.04平台的安装过程

    平台环境:在windows 7中建立VMware虚拟机,操作系统为Ubuntu_14.04_amd_64 1.安装GIZA++ 安装步骤如下: wget http://giza-pp.googleco ...

  2. GO語言基礎教程:數組,切片,map

    這節課我們來講解數組,切片和map,或許您是從其他語言轉到GO語言這邊的,那麼在其他語言的影響下您可能會不太適應GO語言的數組,因為GO語言把數組給拆分成了array,slice和map,接下來的時間 ...

  3. How do I check if a type is a subtype OR the type of an object?

    To check if a type is a subclass of another type in C#, it's easy: typeof (SubClass).IsSubclassOf(ty ...

  4. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)

    一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l  说说关于塔防游戏的想法和思路 l  实现一个简单的塔防游戏 ...

  5. Android布局优化之过度绘制

    如果一个布局十分复杂,那么就需要来排查是否出现了过度绘制,如果出现了,那么很可能会造成刷新率下降,造成卡顿的现象.那么什么是过度绘制呢?过度绘制就是在同一个区域中叠加了多个控件.这就像小时候我们画画, ...

  6. Socket原理与编程基础(转)

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  7. 让淘宝链接在微信中分享,GO

    老婆开了个淘宝店,小卖家的心理大家都知道,一开始的小店总是没有光顾,吸引流量成了重中之中. 所以她到处发链接,微信里发了好多条,可是没过多久有好友微她,问她发的时什么,为什么都是打不开的.结果直接傻眼 ...

  8. IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]

    目前所能见到的硬盘接口类型主要有IDE.SATA.SCSI.SAS.FC等等. IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘.SCSI是"小型计算机系 ...

  9. Python中is和==的区别

    Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么. 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识) ...

  10. 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了

    原来是我在该文件夹下面添加了一个web.config 里面 静止了所有的文件 直接访问 <system.web>    <httpHandlers>      <add ...