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

  在现代软件项目中数据库通常被认为是遗留组件。它们一直以来都被认为难以使用,不论是出于技术的还是非技术的原因。大多数软件开发人员宁可从头开始完完全全地重建一个数据库。 如果数据库是遗留下来的,相信一些开发人员会真心地希望负有此责的,只可惜两种情况都是不实际的,也不可能发生。不论你是否相信,数据库的存在总有它自己的理由——不论这个理由是否充分。可能是数据库变更的代价太高了,也可能是因为有其他系统依赖于该数据库。不论数据库被质疑的原因如何,我们都应该学会如何高效地与任何类型(包括饱受非议)的数据库打交道。MyBatis的开发主要就是为了对付那些设计非 常复杂甚至非常糟糕的数据库。以下描述数据库经常遇到的一些问题以及MyBatis是如何帮助解决这些问题的。

所有权与控制

在现代企业环境中,数据库存在的第一个同时也是最主要的困难其实完全不是技术问题,而是大多数现代软件企业都将数据库的所有权和责任从应用程序开发团队中分离了出来这样一个事实。数据库通常都是完全由企业中的一个独立小组所拥有。如果幸运的话,这个小组可能会与你的项目团队协同工作一起开发软件。否则,你的项目团队与数据库小组之间就可能存在一堵 “墙”,你所有的需求都必须越过这堵墙传递给对方,然后期望它们能够被接收到并且得到理解。 多么可悲啊,但事实就是这样,并且它一直都在发生着。

要和数据库团队打交道通常都是一件非常困难的事情。主要原因就在于他们往往都承受着巨大的压力且处理的项目不止一个。他们经常需要处理大量的需求,有时这些需求甚至可能是冲突的。数据库系统的管理的确是一项非常困难的任务,因此许多公司都认为它是一项至关重要的职责企业数据库系统的崩溃是会惊动该企业的CEO的。因此,数据库管理团队通常都非常谨慎。 数据库系统的变更控制流程通常都比应用程序代码的变更控制流程要严格得多。数据库的某些变 更可能会需要数据转移。其他一些变更则可能需要进行大量的测试以保证它们对性能不会造成影 响。数据库团队难以交往看来的确是有理由的,因此如果可能,能帮帮他们就帮帮他们吧。

当需要进行数据库设计以及数据库交互时,MyBatis通常能带来极大的灵活性。DBA都希望能够看到将在他们的数据库上运行的SQL,对于复杂的查询,他们甚至可能可以帮忙调整一下,而MyBatis使这种希望成为了现实。一些使用MyBatis的开发团队甚至拥有一个DBA或者数据建模人员来帮助他们直接维护MyBatis的SQL文件。数据库管理员和SQL编程人员要理解MyBatis绝对没有 问题,因为背地里绝对不会发生任何意想不到的事情,他们可以看到所有的SQL语句。

系列文章:

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)私有数据库

时间: 2024-10-18 01:45:55

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

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

企业数据库比应用程序数据库更大,其外部影响也更大.它们与其他系统之间存在更多的关系,包括依赖关系和被依赖关系.这些关系可能是Web应用程序与报表工具之间的,但也很有可 能是与其他的复杂系统和数据库的接口.在企业数据库中,不仅仅存在远比应用程序数据库多得 多的外部接口,而且这些接口的作用方式也大不相同.一些接口可能是用于每晚批量加载数据的 接口,其他的则可能是实时事务处理接口.由于这些原因,企业数据库本身可能实际上就是由不止一个数据库组成的.下图从较高的层次描绘了一个企业数据库的例子. 企业数据库

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

MyBatis的存在就是为了简化对关系数据库的访问.数据库的确非常复杂,要正确地使用它们需要做很多的工作.数据库负责管理数据和修改数据.我们使用数据库而不简简单单地使用一个 平板文件的原因就在于数据库为我们提供了许多好处,特别是在数据完整性.性能以及安全性方面. 数据完整性 数据完整性可能是数据库提供的最重要的好处了,因为没有数据完整性,其他一切就没有意义了.如果数据不是一致的.可靠的以及正确的,那它们又有多少价值呢.数据库通过使用强数 据类型,强制约束,以及使用事务从而实现数据完整性的要求.

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

应用程序数据库往往是最小.最简单.也最易于使用的数据库.这种数据库往往是我们这些开发人员通常不介意使用甚至非常乐意使用的.应用程序数据库通常与我们的应用程序处于同一个项目中,两者一齐设计和实现.正是因为这个原因,应用程序数据库的设计往往存在非常大的自由度,它也最有可能与我们的特定应用程序完美匹配.应用程序数据库的对外影响是最小的, 因为它通常只有一两个对外接口.第一个接口连接到我们的应用程序,而第二个接口可能就是一个简单的报表框架或报表工具.下图从较高的层次展示了一个应用程序数据库以及它与其他系

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

并非所有的数据库都如此复杂,需要使用昂贵的数据库管理系统以及企业级的硬件.一些数 据库其实非常小,足以运行在一台老式的PC机上.所有的数据库都是不一样的.它们有各自不 同的需求和不同的挑战.iBATIS可以帮助你使用几乎任何类型的关系数据库,但了解你使用的数 据库究竟是哪种类型通常也是非常重要的. 数据库的划分更多是依据它与其他系统的关系,而不是依据其设计和大小.但数据库的设计 和大小又往往取决于它与其他系统的关系.另一个会影响数据库设计和大小的因素就是数据库的 年龄.随着时间的推移,数据库往往

MyBatis知多少(18)MyBatis系统

小型.简单系统 小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型.它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删查改)应用程序来说可能根本就不存在.MyBatis之所以非常适合于小型应用程序,有3个原因. 第一,MyBatis本身就很小并且简单.它不需要服务器或者其他任何类型的中间件.根本不需要任何额外的基础设施.MyBatis也没有任何第三方依赖.MyBatis的最简安装只需 要2个JAR文件,总计不过37

MyBatis知多少(17)MyBatis和JDBC

有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会产生许多额外的开销.尽管如此,每一行代码又都是必不可少的,所以要减少代码量还真不是一件容易的事情.最多也只不过是将其中的一些代码 挪到某个实用方法中,最明显的就是那些关闭资源(如PreparedStatement和 ResultSet)的代码. 其实,如果使用MyBatis,MyBatis在后台也是

MyBatis知多少(25)动态SQL

使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的动态SQL标签. 所有的逻辑是使用一些额外的标签放在:XML文件.下面是一个例子,其中的SELECT语句将努力在两个方面: 如果想传递一个ID,然后它会返回所有与该ID的记录, 否则,将返回所有雇员ID为NULL的记录. <?xml version="1.0" encoding=&q

MyBatis知多少(17)MyBatis读取操作

上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCHAR(20) default NULL, 5 salary INT default NULL, 6 PRIMARY KEY (i

MyBatis知多少(19)MyBatis操作

若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所需的操作所需的方法. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCH