iBatis系列一
XML
iBatis可以使用xml来作为参数输入以及结果返回;这个功能的优势在于某些特定的场景;还有可以通过DOM方式来作为参数传递;但是这个方式应用的比较少,如果服务器是xml服务器可以采用这种方式;
LazeLoad与groupby技术
对于海量数据,如果一次性就加载可能比较麻烦,这里就需要一些技术来对返回信息进行控制,LazyLoad技术大家都比较清楚,只有需要的时候再从DB中取值;iBatis里面支持LazyLoad,但是LazyLoad的设置是全局性质的,groupby的实现则实现了针对单个操作层面上的配置;无论是LazyLoad还是groupby的实现方式都是查询后,将结果缓存,其他深层次查询的时候还是获得这个对象,通过存取这个对象的属性来实现深度查询(所谓深度查询是指相对于父查询的子查询)。但是有一点,对于lazyloader而言,如果想要加载全部数据效率是比普通查询是要低很多的(因为需要多次访问数据库,增加IO);
rowHandler技术
rowHandler技术和C#里面的DataReader很像了,iBatis里面的实现机制每当取到一条记录后都会走RowHandler的handleRow的方法,如果你实现了这个类的方法,就可以对该数据进行操作;rowhandler的一大优势就是数据操作完之后就释放,不会占用内存,这一点和LazyLoader以及groupby是不一样的;
鉴别器
鉴别器的作用在于如果一个查询里面要么是图书类,要么是新闻类,当然作为父容器可能是"书店类"(图书类和新闻类字段不一样),这样可以通过鉴别器的配置自动将字段匹配到对应的类型上面去;如下图所示:
存储过程技术
iBatis支持存储过程,以及输入时输出参数,要考虑到存储过程的快捷性。尽管存储过程违背了"一次编译,到处运行",但是在提供性能方面很多时候拥有者绝对优势,比如,有的操作需要通过建立多次交互才能实现,但是使用存储过程一次就搞定了(比如判断是否重复,重复就更新,不重复就插入);
批量更新
iBatis提供了批量更新,批量更新多半都是伴随着事务一起的,批量的优势和存储过程有些类似,操作集中在一次完成;批量更新与一个缺点:无法再insert之后就立即返回自动生成主键,如果主键是自动生成的话;还包括其他的值,比如如果两个操作具有依赖性,后面的操作(sql执行)依赖于前一个操作的返回值(返回到应用层),因为批处理是整合完毕后一次性的提交数据库处理。如果是相互依赖就是用存储过程来处理吧;
处理并发
处理并发这个专题iBatis并没有做处理,作为数据层一个共同的问题一般都是使用更新操作外带全家桶(时间戳、版本)的方式来进行处理;
外部参数(external-parameter) vs 内联参数(inline-parameter)
外部参数:
内联参数:就是SQL文中通过#...#或者$...$的方式占位的形式
经过测试外部参数只能是通过有序的"?"来进行,无法在使用声明名称的方式(内联形式),根据iBatis的本意是在insert等操作中内联参数还需要指定类型,通过定义外联方式可以一次性制定好类型,方便重用,但是问题是重用的先决条件是SQL参数次序要保持一致,其次呢,实际应用中,即使不指定类型也是可以顺利插入/更新;所以外部参数被使用的不多。
iBatis系列一的更多相关文章
- iBatis系列之三
iBatis和Hibernate最大差别就是在于iBatis没有严格的和具体的表做关联:而是将结果集和DAO做关联. iBatis的SqlConfig.xml配置一个properties文件,其实可以 ...
- iBatis --> MyBatis
从 Clinton Begin 到 Google(从 iBatis 到 MyBatis,从 Apache Software Foundation 到 Google Code),Apache 开源代码项 ...
- iBatis.Net(C#)系列Demo源码
iBatis.Net(C#)系列一:简介及运行环境源码 [下载] iBatis.Net(C#)系列二:SQL数据映射源码 [下载] iBatis.Net(C#)系列三:数据库查询源码 [下载]
- [原]iBatis.Net(C#)系列一:简介及运行环境
转载请注明http://www.cnblogs.com/13590/archive/2013/02/27/2934580.html 摘要:介绍iBatis.Net的基本情况和运行原理,运行环境中各参数 ...
- IBatis.Net系列-多参数的SQL语句的配置
我们在使用IBatis.net操作数据的时候,肯定会碰到SQL参数当我们有一个参数时,IBatis的xml映射文件如下: <statement id="getProduct" ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置>简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介 ...
- 深入浅出Mybatis系列(一)---Mybatis入门
最近两年 springmvc + mybatis 的在这种搭配还是蛮火的,楼主我呢,也从来没真正去接触过mybatis, 趁近日得闲, 就去学习一下mybatis吧. 本次拟根据自己的学习进度,做一次 ...
随机推荐
- 为一张PCI卡打通经络的过程
一张PCI卡通过“一转二”的转接卡插在主板上,probe调用失败,日志显示读取配置空间的时候发生了奇偶校验错误,可是使用相同的转接卡把它插在另外一台相同机器的主板上时,却运行正常,这就说明不是转接卡的 ...
- 【转】以XML文件方式保存用户数据——2013-08-25 22
正在做项目中有很多游戏数据要保存,常见的玩家数据这些比较简单的可以用CCUserDefault.它是cocos2d-x用来存取基本数据类型用的.保存为XML文件格式. 主要方法:(和java的map很 ...
- HDU4570:Multi-bit Trie(区间DP)
Problem Description IP lookup is one of the key functions of routers for packets forwarding and clas ...
- javascript进击(三)简介
JavaScript 表单验证(可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证) 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单中的必填项目? 用户输 ...
- 程序员带你学习安卓开发系列-Android文件存储
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...
- YII设置用户访问过滤
设置用户访问过滤 1.哪个控制器设置访问过滤,就在哪个控制器中添加如下代码 class XxxController extends Controller { //当前控制器是否使用过滤功能 publi ...
- StringBuffer跟StringBuilder以及HashMap跟HashTable
StringBuffer是线程安全的 HashTable是线程安全的,但HashMao单线程程序中的性能比HashTable要高,对了HashTable用(add),HashMap用的(put)
- @property在内存管理中的参数问题
// // Created by wanghy on 15/8/14. // // /* retain : release旧值,retain新值(用于OC对象),要配合nonatomic使用. ass ...
- C# 中使用win32函数 GetScrollInfo返回false 返回引用全是零的问题
最近做一个项目要获得ScrollBar的位置,因为.net找不到此类功能,只好用MFC中的函数了,GetScrollPos只返回listview顶部的位置,此时我找到了GetScrollInfo,觉得 ...
- dapper的一个小扩展以支持dataset
废话不多,直接上方法 public static DataSet ExecuteDataSet(this IDbConnection cnn, IDbDataAdapter adapter, stri ...