Java中使用ibatis调用Oracle存储过程和函数

来源:互联网 发布:apache ignite 编辑:程序博客网 时间:2024/05/17 08:17


Hibernate等提供了全面的数据库封装机制的“全自动化”ORM 实现,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。
ibatis是“半自动化”,并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO。比较灵活给程序员更多的发挥空间。

以下代码使用ibatis-sqlmap-2.jar,在Windows的Tomcat里测试通过,在Linux下的Weblogic里测试通过。

一、使用ibatis调用Oracle存储过程
1、创建测试存储过程,名称:TestPro

CREATE OR REPLACE PROCEDURE TestPro(myLevel IN VARCHAR2, myResult out  PLS_INTEGER) isBEGIN  myResult:=0;    if myLevel = 'a' then      myResult:=0;  end if;    if myLevel = 'b' then      myResult:=-1;  end if;    if myLevel = 'c' then      myResult:=1;  end if;END;

2、调用存储过程的SqlMap文件配置

<parameterMap id="testProParamMap" class="java.util.HashMap"><parameter property="myLevel" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /><parameter property="myResult" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="OUT" /></parameterMap><procedure id="testOraclePro" parameterMap="TestProParamMap">{call TestPro(?,?)} </procedure>

3、调用存储过程的DAO层代码

public Object TestProDao(Map map) {return getSqlMapClientTemplate().queryForObject("ticket.testOraclePro", map);}

4、前台调用

Map mapPro = new HashMap();mapPro.put("myLevel", "b");Object rs=xxxxDao.TestProDao(mapPro);LogUtil.debug("rs="+rs);LogUtil.debug("myResult="+mapPro.get("myResult"));

结果:
rs=null
myResult=-1
从测试结果看,返回结果是在Map里,输出参数作为键来访问取得

二、使用ibatis调用Oracle函数

1、创建测试函数,名称:TestFun

CREATE OR REPLACE FUNCTION TestFun(myLevel IN VARCHAR2)  RETURN NUMBER AS  myResult      PLS_INTEGER := 0;BEGIN  if myLevel = 'a' then      myResult:=0;  end if;    if myLevel = 'b' then      myResult:=-1;  end if;    if myLevel = 'c' then      myResult:=1;  end if;  return myResult;END;
2、调用函数的SqlMap文件配置

<parameterMap id="testFunParamMap" class="java.util.HashMap"><parameter property="myResult" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="OUT" /><parameter property="myLevel" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" /></parameterMap><procedure id="testOracleFun" parameterMap="TestFunParamMap">{? = call TestFun(?)} </procedure>
3、调用函数的DAO层代码

public Object TestFunDao(Map map) {return getSqlMapClientTemplate().queryForObject("ticket.testOracleFun", map);}
4、前台调用

Map mapFun = new HashMap();mapFun.put("myLevel", "b");Object rs=xxxxDao.TestProDao(mapFun);LogUtil.debug("rs="+rs);LogUtil.debug("myResult="+mapFun.get("myResult"))
结果:
rs=null
myResult=-1
从测试结果看,返回结果是在Map里,输出参数作为键来访问取得

0 0
原创粉丝点击