SqlMapCient 类提供了执行所有 mapped statement 的 API。这些方法如下:

 public int insert(String statementName, Object parameterObject)
throws SQLException public int update(String statementName, Object parameterObject)
throws SQLException public int delete(String statementName, Object parameterObject)
throws SQLException public Object queryForObject(String statementName, Object parameterObject)
throws SQLException public Object queryForObject(String statementName, Object parameterObject, Object resultObject) throws SQLException public List queryForList(String statementName, Object parameterObject)
throws SQLException public List queryForList(String statementName, Object parameterObject, int skipResults, int maxResults)
throws SQLException public List queryForList (String statementName, Object parameterObject, RowHandler rowHandler) throws SQLException public PaginatedList queryForPaginatedList(String statementName, Object parameterObject, int pageSize)
throws SQLException public Map queryForMap (String statementName, Object parameterObject, String keyProperty)
throws SQLException public Map queryForMap (String statementName, Object parameterObject, String keyProperty, String valueProperty)
throws SQLException

在上面的每个方法中,Mapped  Statement  的名称作为第一个参数。这个名称要对应<statement>的名称属性。另外,第二个参数总是参数对象。如果不需要参数对象,可以为

null。除了这些之外,上面的方法就没有相同的了。下面简单地介绍一下它们的不同之处。

* insert( ),update( ),delete( )

这些方法用于数据更新(即非查询语句)。这就是说,使用下面的查询方法来执行数据更新操作并不是不可能。但这显得很奇怪,并明显依赖于 JDBC 的驱动程序。执行 update(), 返回受影响数据记录的数目。

* queryForObject( )

queryForObject()方法有两个版本。一个返回查询得到的新对象,另一个用一个事先生成 的对象作为参数。后者对于使用多个查询为对象赋值很有用。

* queryForList( )

queryForList()方法也有三个版本。第一个执行一个查询并返回所有的查询结果。第二个 允许指定跳过结果的数目(即开始点)和返回结果的最大数目。对于查询一个数量很大的结 果集,并且不想返回所有的数据时很有用。最后一个版本的 queryForList()方法需要一个行处理器(row handler)作为输入参数。这 个方法可以让您使用结果对象,而不是数据表的行和列来逐行地处理查询结果集。这个方法 的参数除了例行的名称和参数对象外,还包括了一个实现了 RowHandler 接口的类的实例。 RowHandler 接口只有一个方法:

public void handleRow (Object object, List list);对于每一行从数据库中返回的数据,RowHandler 接口的方法都会被执行。这种处理数 据的方法,简洁而具有扩展性。

* queryForPaginatedList( )

对于要返回一个可以向前和向后翻页的数据子集,queryForPaginatedList()方法很有用, 它返回一个可管理的 List  对象。通常用于只显示一部分查询结果的用户界面。一个常见的 例子是,搜索引擎找到了 10000 条结果,但每次只显示其中的 100 条。PaginatedList 接口包 含了向前和向后翻页的方法(nextPage(),previousPage(),gotoPage()),并提供了检查翻页 状态的方 法( isFirstPage() , isMiddlePage() , isLastPage() , isPreviousPageAvailable() , getPageIndex(),getPageSize())。虽然不能从 PaginatedList 接口得到查询结果集的总数,但 这个总数可以再执行一个简单的语句 count()来得到。否则,PaginatedList 接口会大大的降低 性能。

* queryForMap( )

queryForMap()方法将结果集放在一个Map 对象中,这个 Map 对象用一个传入参数 keyProperty 作为 key 值。例如,要读入一批 Employee 对象,您可以将这些 Employee 对象放在一个用 employeeNumber 属性作为 key 值 的 Map 对象中。Map 对象的值可以是整个 Employee 对象,也可以是 Employee 对象的另一 个属性,属性的名称由第二个参数 valueProperty 指定。例如,您可能只是需要一个 Map 对 象,用员工号作为 key 值,员工姓名作为 value 值。不要把它和用 Map 作为结果对象的概念 混淆。这个方法可以使用 Java Bean 和 Map(或基本类型的包装类,但不可能这样用)作为 结果对象。

代码实例:

例子1:执行update(insert,update,delete)

 sqlMap.startTransaction();
Product product = new Product(); product.setId (1); product.setDescription (“Shih Tzu”);
int rows = sqlMap.insert (“insertProduct”, product);
sqlMap.commitTransaction();

例子2:查询成对象(select)

 sqlMap.startTransaction();
Integer key = new Integer (1);
Product product = (Product)sqlMap.queryForObject (“getProduct”, key); sqlMap.commitTransaction();

例子3:用预赋值的结果对象查询成对象(select)

 sqlMap.startTransaction();
Customer customer = new Customer(); sqlMap.queryForObject(“getCust”, parameterObject, customer);
sqlMap.queryForObject(“getAddr”, parameterObject, customer); sqlMap.commitTransaction();

例子4:查询成对象List(select)

 sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null);
sqlMap.commitTransaction();

例子5:用结果集边界查询成对象List(select)

 sqlMap.startTransaction();
List list = sqlMap.queryForList (“getProductList”, null, 0, 40); sqlMap.commitTransaction();

例子6:用RowHandler执行查询(select)

 public class MyRowHandler implements RowHandler {
public void handleRow (Object object, List list) throws SQLException { Product product = (Product) object;
product.setQuantity (10000);
sqlMap.update (“updateProduct”, product);
// Optionally you could add the result object to the list.
// The list is returned from the queryForList() method.
}
}
sqlMap.startTransaction();
RowHandler rowHandler = new MyRowHandler();
List list = sqlMap.queryForList (“getProductList”, null, rowHandler);
sqlMap.commitTransaction();

例子7:查询成Paginated List(select)

 PaginatedList list =
sqlMap.queryForPaginatedList (“getProductList”, null, 10);
list.nextPage(); list.previousPage();

例子9:查询成Map(select)

 sqlMap.startTransaction();
Map map = sqlMap.queryForMap (“getProductList”, null, “productCode”);
sqlMap.commitTransaction();
Product p = (Product) map.get(“EST-93”);

注意:自动提交,当没调用 startTransaction 的情况下,statements 会自动提交。没必要 commit/rollback。

Ibatis学习总结7--SqlMapClient 执行 SQL 语句的更多相关文章

  1. power desinger 学习笔记三<批量执行sql语句>

    使用sql脚本导入表结构,直接 附带表的 约束.列的注释.真的可以哦 sql语句如下: create table test01 (   ID                   VARCHAR2(10 ...

  2. QtSQL学习笔记(3)- 执行SQL语句

    QSqlQuery类提供了一个用于执行SQL语句和浏览查询的结果集的接口. QSqlQueryModel和QSqlTableModel类提供了一个用于访问数据库的高级接口,这将在下一节介绍.如果你不熟 ...

  3. 10.1(java学习笔记)JDBC基本操作(连接,执行SQL语句,获取结果集)

    一.JDBC JDBC的全称是java database connection java数据库连接. 在java中需要对数据库进行一系列的操作,这时就需要使用JDBC. sun公司制定了关于数据库操作 ...

  4. MyBatis学习 之 三、动态SQL语句

    目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...

  5. 在mybatis执行SQL语句之前进行拦击处理

    转载自:http://blog.csdn.net/hfmbook/article/details/41985853 比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql ...

  6. SQL*PLUS中批量执行SQL语句

    SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...

  7. MVC EF 执行SQL语句(转载)

    MVC EF 执行SQL语句 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 闲着没事,看了一篇关于LI ...

  8. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  9. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

  10. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

随机推荐

  1. javaScript事件(四)event的公共成员(属性和方法)

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 四.IE事件处理程序 以上内容见javaScript事件(二)事件处理程序 五.事件对象 以上内容见javaS ...

  2. 警惕javascript变量的全局污染问题

    作用域的概念总是和变量形影不离,它不是javascript语言独有的概念,只是其运用上与其他大型语言略有不同,JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基 ...

  3. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  4. HDU 1892 See you~

    最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久.. 代码: #include <iostream> #include <cst ...

  5. TestLink学习五:TestLink1.9.13和JIRA6.3.6的集成

    testlink和jira的集成,一般步骤: 第1步:System-Issue Tracker Management添加JIRA的db模式.第2步:测试项目管理,“Issue Tracker Inte ...

  6. smarty中三种变量的访问方式

    在模板中smarty有三种变量,第一种,php分配的变量,第二种配置文件里的变量,第三种,PHP全局数组里的变量,配置文件里变量的访问方式可以是{#bgcolor#},"#"必须紧 ...

  7. HTML5-WebSocket技术学习(2)

    上一篇介绍了websocket的基本用法.这篇介绍websocket的一个框架: socket.io socket.io是一个既可以用在客户端又可以用在服务器端的框架. 本篇介绍socket.io在客 ...

  8. 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

    前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...

  9. CSS3弹性伸缩布局(一)——box布局

    CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案----Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃 ...

  10. CLR执行模式之程序集代码的执行

    所知IL是与CPU无关的机器语言,其能访问和操作对象类型,并提供指令来创建和初始化对象,调用对象上的虚方法以及直接操作数组对象等,故可视为一种面向对象的机器语言.每种语言的存在都有其存在的价值和原因, ...