Coohx 2017-12-05
一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身独立
iBATIS会连接到数据库,设置参数,执行语句,获取结果,然后关闭和释放资源。
有三种原因使得iBATIS很适合于这种小型的应用程序:
首先,iBATIS本身就是小巧而简单的。它不需要服务器和任何其它中间件(middleware)。不需要任何额外机制的支持。iBATIS不依赖于其它第三方组件。一份最小的iBATIS安装只需引用一个dll文件和244KB的磁盘空间。除了SQL映射文件,再不需要其它安装,因此只需几分钟时间,您就可以拥有一个可以使用的数据持久层了
其次,iBATIS不会影响到既有的应用程序或数据库的设计。因此,如果您有一个小型应用程序,已经有了部分实现,甚至已经发布了,都可以使用iBATIS对持久层进行重构。因为iBATIS的简单,它不会使您的程序结构过于复杂,这一点O/RM工具或代码生成器未必能够保证,因为它们总是基于对应用程序或数据库所作的某种假设。
最后,iBATIS也适合于大型软件系统。
简单:最简单的持久层框架之一
性能
分离关注点,很好的实现程序的架构和分层
分工,sql语句和应用层代码的完全隔离
可移植性,支持三种开发平台Java,Ruby,C#
开源和可信度
(1)完全拥有控制权直至永远
(2)如果程序中的SQL完全是动态生成的
目前来看,能用#就不要用$
mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.
如:对于sql语句order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id"。