Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库的操作拥有更加灵活的控制,对于那些经常需要调用本地数据库函数自定义SQL语句,或是喜欢自己优化SQL执行效率的开发者来说,iBatis是一个非常不错的选择。而得到广泛应用的开源企业架构SpringFramework,也很好的将其进行了集成,使得iBatis在 SpringFramework中的使用更加便利、快捷。开发者所要做的就是继承SpringFramework中提供的 SqlMapClientDaoSupport类即可。下面,我将自己的使用经验与大家分享一下:

1、SqlMapClientFactoryBean 的装配

SqlMapClientFactoryBean是SqlMapClientTemplate使用的基础,如果在

SpringFramework应用中没有装配SqlMapClientFactoryBean,那么SqlMapClientTemplate将不可用,报空指针错误。

Java代码

  1. <beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  2. <propertyname="configLocation"value="/WEB-INF/sqlmap-config.xml"/>
  3. <propertyname="dataSource"ref="dataSource"/>
  4. <propertyname="lobHandler"ref="oracleLobHandler"/>
  5. bean>

2、继承使用SqlMapClientDaoSupport类

声明Java类:

Java代码

  1. ......
  2. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
  3. ......
  4. publicclass ReportDAOImpl extends SqlMapClientDaoSupport {
  5. ......
  6. }
  7. SpringFramework配置文件中装配Java类:
  8. "reportDao"class="com.test.dao.ReportDAOImpl">
  9. "sqlMapClient" ref="sqlMapClient"/>

SpringFramework配置文件中装配Java类:

3、使用SqlMapClientTemplate查询

Java代码:

当执行没有参数的查询时:

Java代码

  1. List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");

"TestSpace"为iBatis SqlMap文件的命名空间;"qryTest"为iBatis SqlMap的查询方法id

当按照主键获取某条记录信息时:

Java代码

  1. Long id = new Long("2");
  2. Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id);

当按照某些条件查询时:

Java代码

  1. ObjectA objA = new ObjectA();
  2. objA.setParam1("test1");
  3. objA.setParam2("test2");
  4. ......
  5. List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);

如果需要取4~40条数据:

List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);

也可以返回Map

Java代码

  1. Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");

4、使用SqlMapClientTemplate添加数据

Java代码:

  1. ObjectA objA = new ObjectA();

Java代码

  1. objA.setParam1("test1");
  2. objA.setParam2("test2");
  3. ......
  4. getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);

5、使用SqlMapClientTemplate更新数据

Java代码:

Java代码

  1. ObjectA objA = new ObjectA();
  2. objA.setParam1("test1");
  3. objA.setParam2("test2");
  4. ......
  5. getSqlMapClientTemplate().update("TestSpace.updateTest", objA);

更新前20条记录:

Java代码

  1. getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);

6、使用SqlMapClientTemplate删除数据

Java代码:

Java代码

  1. Long id = new Long("2");
  2. getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);

详解iBaits中SqlMapClientTemplate的使用的更多相关文章

  1. jQuery:详解jQuery中的事件(二)

    上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...

  2. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...

  3. 【转】详解C#中的反射

    原帖链接点这里:详解C#中的反射   反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...

  4. 详解Webwork中Action 调用的方法

    详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...

  5. 【转】详解JavaScript中的this

    ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...

  6. 深入详解SQL中的Null

    深入详解SQL中的Null NULL 在计算机和编程世界中表示的是未知,不确定.虽然中文翻译为 “空”, 但此空(null)非彼空(empty). Null表示的是一种未知状态,未来状态,比如小明兜里 ...

  7. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  8. 详解Objective-C中委托和协议

    Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD: ...

  9. 举例详解Python中的split()函数的使用方法

    这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下   函数:sp ...

随机推荐

  1. php正则验证车牌格式的函数

    /** * 判断是否合法车牌号 * @name isCarLicense * @param $license * @return bool */ function isCarLicense($lice ...

  2. leetcode算法题整理

    一.线性表,如数组,单链表,双向链表 线性表.数组 U1.有序数组去重,返回新数组长度 A = [1,1,2] -> [1,2] 返回2   分析:其实一般数组的问题都可以用两个指针解决,一个指 ...

  3. 2017-11-4—稳态和暂态/瞬态(对运放积分电路的思考)[待仿真]

    先直接截图了,暂态或者说瞬态都是暂时的状态,是从一个稳定态到另一个稳定态的过程. 之所以要了解这个概念是因为对于使用运放搭建的模拟PID有很多的疑惑,比如负反馈没有电阻满不满足"虚短&quo ...

  4. 【函数式编程】reducer为什么叫reducer

    最近学习前端的技术,在了解react对DOM的组件抽象,但不提供整体的组件通讯时候,了解了redux,然后就是react-redux: 抽象后,视图完全由对象决定,而用户只能接触视图,所以对象的改变必 ...

  5. cadence单一原理图库的设计

  6. spring-boot+mybatisPlus+shiro的集成demo 我用了5天

    spring-boot + mybatis-plus + shiro 的集成demo我用了五天 关于shiro框架,我还是从飞机哪里听来的,就连小贱都知道,可我母鸡啊.简单百度了下,结论很好上手,比s ...

  7. 使用Java程序读取JPG Tif等格式图片的exif信息

    package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...

  8. 在C++中,子类重载一个操作符时,如何调用父类被重载的操作符函数

    使用static_cast运算符将子类转换为父类即可 #include <iostream> using namespace std; class Base { public: Base( ...

  9. js 第三期 小肩膀 第一段

    var 时间戳 = new.Date().getTime();//系统引擎 var 时间戳 = Date.now(); //V8引擎 数据类型 false =  underfuned =null = ...

  10. TCP/IP详解--拥塞控制 & 慢开始、拥塞避免、快重传和快恢复。

    https://www.cnblogs.com/losbyday/p/5847041.html 膜拜大佬,看完了就会