1. 这段时间在看存储过程的优劣性并尝试提高程序的运行性能,
存储过程能够:
a:降低网络流量
b:执行计划,存储过程在首次执行是将产生一个执行计划。
c:使用存储过程能够增强对执行计划的重复使用,从而也可以通过使用远程过程调用RPC处理服务器上的存储过程而提高性能,RPC封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
d:可维护性高,更新存储过程比更改、测试以及重新部署程序集需要的时间少。
e:代码精简一直,一个存储过程可以用于程序代码的不同位置。
f:更好的版本控制,可以轻松的回复和更新存储过程的引用。
g:安全性更高,能有效防止sql注入。除了DML附带的sql参数。
缺点:
可移植性差,不善维护,代码可读性不强,无法采用面向对象的思想对存储过程进行封装设计,从而无法形成可复用的业务逻辑框架。
2. 看了下优缺点,然后来简单的调用下存储过程,学习开始了...... 以前还没怎么用过存储过程。
环境:J2EE+Ibatis2+Flex4 +Spring
接下来直接进入主题,看下Java通过Ibatis调用存储过程并返回结果的关键例子。
存储过程:
create or replace
PROCEDURE METERLISTPRO
(
ML OUT SYS_REFCURSOR ,
SZ OUT INTEGER
) AS
BEGIN
OPEN ML FOR SELECT * FROM METERINFO;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM METERINFO ' INTO SZ;
END METERLISTPRO;create or replace
PROCEDURE SYSDATAFUNC
(
nowtime OUT DATE
) AS
seledate Date;
BEGIN
execute immediate 'select sysdate from dual ' into nowtime;
END SYSDATAFUNC;sqlMap配置文件:
<parameterMap id="dd" class="map">
<parameter property="nowtime" javaType="java.util.Date" jdbcType="TIMESTAMP" mode="OUT" />
</parameterMap>
<procedure id="sysDateProcdure" parameterMap="dd" >
<![CDATA[
{CALL SYSDATAfUNC(?)}
]]>
</procedure>
<typeAlias alias="meterinfo" type="com.roy.beans.Meterinfo"/>
<resultMap class="com.roy.beans.Meterinfo" id="meterinfoMap">
<result property="meterid" column="meterid" />
<result property="rtuid" column="rtuid" />
<result property="deviceno" column="deviceno" />
<result property="meterno" column="meterno" />
<result property="metertype" column="metertype" />
<result property="meteradd" column="meteradd" />
<result property="meteropenedtime" column="meteropenedtime" />
<result property="metergasclass" column="metergasclass" />
<result property="meterinitscale" column="meterinitscale" />
<result property="meterfluxchannelno" column="meterfluxchannelno" />
<result property="metervalvechannelno" column="metervalvechannelno" />
<result property="meterinstalltime" column="meterinstalltime" />
<result property="metermaxflux" column="metermaxflux" />
<result property="meterminflux" column="meterminflux" />
<result property="changeflag" column="changeflag" />
<result property="spareflag" column="spareflag" />
<result property="newflag" column="newflag" />
<result property="maxvalue" column="maxvalue" />
<result property="minvalue" column="minvalue" />
<result property="modelno" column="modelno" />
<result property="tsyhbm" column="tsyhbm" />
<result property="valveflag" column="valveflag" />
<result property="fluxflag" column="fluxflag" />
<result property="testflag" column="testflag" />
<result property="maxtemp" column="maxtemp" />
<result property="mintemp" column="mintemp" />
<result property="maxpress" column="maxpress" />
<result property="minpress" column="minpress" />
<result property="factoryno" column="factoryno" />
<result property="measurementtype" column="measurementtype" />
<result property="pitno" column="pitno" />
<result property="unitid" column="unitid" />
<result property="areaid" column="areaid" />
<result property="pwno" column="pwno" />
<result property="serialno" column="serialno" />
<result property="gelimodelno" column="gelimodelno" />
<result property="pressunit" column="pressunit" />
<result property="meterlevel" column="meterlevel" />
<result property="presstype" column="presstype" />
</resultMap>
<parameterMap class="java.util.HashMap" id="pm">
<parameter property="ml" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="meterinfoMap" mode="OUT"/>
<parameter property="sz" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>
</parameterMap>
<procedure id="meterlist" parameterMap="pm" >
<![CDATA[
{CALL METERLISTPRO(?,?)}
]]>
</procedure>方法调用实现类:
public Date getSysDate() {
Date d = null;
Map map = new HashMap();
try {
this.getSqlMapClientTemplate().queryForObject("testnsp.sysDateProcdure",map);
d = (Date)map.get("nowtime");
} catch (DataAccessException e) {
e.printStackTrace();
}
return d;
}@Override
public Map procedureList() {
Map mapm = new HashMap();
try {
this.getSqlMapClientTemplate().queryForList("testnsp.meterlist",mapm);
} catch (DataAccessException e) {
e.printStackTrace();
}
return mapm;
}到此结束了。程序源码下载:到本人资源进行下载!http://download.csdn.net/detail/roy_bird/4608211