`

iBATIS调用存储过程

阅读更多

按照惯例还是以一个简单的实例开始。笔者已经习惯如此,学习一个新的东西首先就是要学会如何使用,那么最快速的方法便是直接照例去改。这也就是我们程序员所说的改代码的能力,俗语中的触类旁通更是此道理。能改,到如何改,再到如何更好(不断的思考、重构)是一个层次或者等级提升的过程。

实例:

本实例完成以下功能:查询某个用户(根据手机号码查)从某个时间开始的通话时长,按分钟计算

存储过程:

/*
*calls表存储了所有用户的通话记录
*/
DELIMITER $$

USE `exampledb` $$

DROP PROCEDURE IF EXISTS `calls_duration` $$

CREATE DEFINER = `root` @`localhost` PROCEDURE `calls_duration` (
  IN calltime VARCHAR (20),
  IN mobnum VARCHAR (20)
) 
BEGIN
  SELECT 
    caller_id AS 'caller',
    SUM(duration) / 60 AS 'duration' 
  FROM
    exampledb.calls 
  WHERE call_start > calltime 
    AND caller_id LIKE mobnum 
  GROUP BY caller_id ;
END $$

DELIMITER ;

映射文件:

<sqlMap namespace="calls">
    <typeAlias alias="caller" type="com.huan.model.Caller"/>
    <parameterMap  id="callsMap" class="java.util.HashMap">  
        <parameter property="calltime" jdbcType="varchar" javaType="java.lang.String" mode="IN" />  
        <parameter property="mobnum" jdbcType="varchar" javaType="java.lang.String" mode="IN"/>  
    </parameterMap>
    <resultMap id="callres" class="caller">
    	<result property="callerid" column="caller"/>  
        <result property="duration" column="duration"/>  
    </resultMap>
	<procedure id="calls_duration" parameterMap="callsMap" resultMap="callres">
		{call calls_duration(?,?)}
	</procedure>
</sqlMap>

   测试代码:

public class SqlMapUtil{
	public static SqlMapClient getVoipSwitchSqlMapClient() {  
        SqlMapClient sqlmapclient = null;  
        try {  
            sqlmapclient = SqlMapClientBuilder.buildSqlMapClient(Resources  
                    .getResourceAsReader("com/huan/sqlmap/SqlMapVoipSwitch.xml"));  
        } catch (IOException e1) {  
            e1.printStackTrace();  
        }  
        return sqlmapclient;  
	}
}
  
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////

SqlMapClient client = SqlMapUtil.getVoipSwitchSqlMapClient();
Map parameterMap = new HashMap();
parameterMap.put("calltime", "2012-09-01 00:00:00");
parameterMap.put("mobnum", "18687752225");
try {
	Caller caller = (Caller)client.queryForObject("calls.calls_duration", parameterMap);
	System.out.println(caller.getDuration());
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

POJO:

public class Caller{
	private String caller;
	private double duration;
	
	public void setCaller(String caller){
		this.caller = caller;
	}
	public String getCaller(){
		return this.caller;
	}
	public void setDuration(double duration){
		this.duration = duration;
	}
	public double getDuration(){
		return this.duration;
	}
} 

OK,以上就是iBATIS调用存储过程的基本步骤及代码。这里我们发现映射文件里存储过程的出参和入参是两个map。在iBATIS里SQL语句里的出参和入参是可以自由定义的,既可以是JAVA里的基本数据类型也可以是引用类型,也可以是复杂的诸如Map、Set这样的数据类型。而笔者发现对于存储过程的调用iBATIS要求出参和入参必须是Map类型,如上例所示按道理讲返回类型完全可以是Caller对象,读者可以自己去试,这样是读不到所得结果的。由此我们得出了一个结论:ibatis 调用存储过程默认返回的是map类型,即便是一个值也是被放在了map里。那么入参也是同理。这里我们还要注意的一点是,在iBATIS的映射文件里parameterMap和resultMap里的参数名字必须和存储过程的入参名字以及查询(本例只是个负责查询的存储过程)出的名字一一对应,不然很有可能会发生错误。


PS:对代码格式的解释

笔者不知道为什么总是在代码前出现ITEYE编辑器里的HTML代码,因此读者在看的时候很有可能就看到诸如:

<span style="font-size: x-small;">

 这样的代码。特此声明与笔者无关,笔者不想浪费大家的时间不想影响大家的视觉效果,但只能这样。如有方法去除或者彻底避免此情况的发生请告知笔者,非常感谢!

 

如需转载请务必保留原出处,谢谢配合!

 





分享到:
评论

相关推荐

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    ibatis调用存储过程

    在Java开发中,iBATIS(现在被称为MyBatis)是一个流行的数据持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化数据库操作。...希望这个示例能帮助你更好地理解iBATIS调用存储过程的方法。

    IBATIS调用存储过程

    首先,理解iBATIS调用存储过程的基本原理。iBATIS允许开发者在映射文件中定义存储过程调用,通过`&lt;procedure&gt;`标签来实现。在这个例子中,我们看到一个名为`P_DJ_GETRYANDPYRBYRYID`的存储过程被调用,它接受三个...

    ibatis调用存储过程介绍

    本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...

    iBatis调用存储过程

    iBatis调用存储过程

    ibatis调用存储过程.txt

    ibatis调用存储过程.txt [removed] var share_info = {}; [removed]

    Ibatis调用存储过程调用存储过程

    Ibatis中调用其它的SQL语句很容易,那么如何在Ibatis中调用存储过程呢?

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程

    ibatis调用oracle存储过程

    ibatis与存储过程(带输出参数的应用)

    在实际项目中,使用Ibatis调用存储过程时,还应注意以下几点: 1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java...

    Ibatis调用Oracle存储过程返回自定义类型

    Ibatis调用Oracle存储过程,返回自定义的类型。

    IBatis查删改查与调用存储过程 mysql数据库

    "IBatis查删改查与调用存储过程 mysql数据库" 这个标题揭示了本文将深入探讨如何使用IBatis框架在MySQL数据库中执行基本的CRUD(创建、读取、更新、删除)操作,以及如何调用存储过程。IBatis是一个轻量级的Java持久...

    ibatis官方中文文档

    学习这两份文档,开发者不仅可以理解iBATIS的基本工作原理,还能掌握如何高效地利用iBATIS调用存储过程,提高数据库操作的灵活性和性能。对于Java开发者,尤其是从事Web应用开发的人员,深入理解和熟练运用iBATIS是...

    ibatis调用oracle的函数,存储过程的方法

    调用存储过程: ```java Map, Object&gt; params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...

    J2EE+Spring+Ibatis2+blazeds存储过程调用返回结果集

    在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...

    IBatis中的存储过程应用实例

    在IT行业中,数据库操作是不可或缺的一部分,而IBatis作为一款流行的数据映射框架,提供了一种灵活的方式来处理SQL语句,包括调用存储过程。存储过程是数据库中预编译的SQL语句集合,可以提高性能、增强安全性,并...

    iBatis 轻量级持久层架构

    2. **iBatis调用存储过程**: iBatis允许开发者直接调用数据库的存储过程。在XML映射文件中,使用`&lt;procedure&gt;`标签来定义存储过程的调用,指定存储过程的名称和参数。存储过程的输入和输出参数通过`&lt;parameterMap&gt;...

    struts2 存储过程

    总结,Struts2调用存储过程涉及数据库连接、DAO设计、Action控制和视图展示等多个环节。通过合理配置和编程,我们可以有效地利用存储过程提升应用的效率和灵活性。"Struts2_crud2.0_Procedure"示例提供了具体实现,...

Global site tag (gtag.js) - Google Analytics