
首先介绍一下几种数据库存储的解决方案:
SQL是面向数据库的操作语言,提供了操作数据库的全部功能。市场上存在的其他解决方案,提供的功能都是SQL功能的子集。所以,iBatis就使用SQL作为最主要的操作数据库的手段,同时结合其他工具的优点。
当我们需要使用复杂逻辑来操作数据库时,如果全部逻辑都是在数据库端实现,就需要使用存储过程。
存储过程的优点是执行比较快,但是缺点也是很明显的,缺点包括:
(1)编写和调试没有合适的IDE软件,比较困难。
(2)基于过程的编程方式,与基于对象的业务逻辑相比,实现比较困难,有时甚至不能实现。
(3)数据库服务器往往在第三方,有时并不开放存储过程。
为了解决存储过程的弊端,人们尝试在高级的语言中访问数据库,而把业务处理逻辑在数据库端解除,是的SQL直接与程序语言接触。
这样做到优点是:实现了高级语言和SQL的无缝结合。
缺点是:
(1)SQL本身的标准并不统一,基于Oracle的SQl和基于MySQL的SQL会有微小的差异,这样在连接不同数据库时,会产生错误。
(2)SQL语句必须先编译为高级语言,然后才能执行。
就是把SQL作为字符串,插入到程序之中,这种方式比较常见。它有效的解决了SQL和高级语言的耦合,通过高级语言的API来调用SQL。这种解决方式有很大的灵活性,可以在运行时给SQl设定相应的变量和参数。
缺点是:
(1)高级语言API调用比较繁琐。
(2)SQL语句较长时,会被分为很多段,调试和维护复杂。
这种方法在开发者角度消除了SQL,通过建立程序对象和数据库对象的映射关系,让框架自动生成SQL,而开发者则按照面向对象的方式编程。
这种方式的优点是:
(1)API接口比较简单。
(2)提供Transaction、Cache等高级性能的管理
(3)提供懒载入服务
缺点是:
(1)对象和关系型数据库之间映射规则比较复杂,在一些不符合范式的数据库系统上,映射甚至不存在。
(2)提供的功能只是SQl语言的子集,有些复杂SQl逻辑不能实现。
学习的技术 |
类似的优点 |
解决的问题 |
存储过程 |
数据库查询逻辑位于程序逻辑之外 |
业务逻辑和数据查询逻辑分离 |
Inline SQL |
直接撰写完整SQL,没有拼接和设置参数部分 |
无需系统编译,可以直接对SQL进行调试 |
动态SQl |
可以动态生成SQL |
不用在编码中插入SQL字符串 |
对象和关系型数据库映射 |
支持数据库对象的高级操作,如懒加载、缓存、继承等等 |
可以处理各种类型的数据结构的存储 |

