javaEE--ibatis--Sping+flex4 调用存储过程返回List结果集

本文介绍了如何利用Java、Ibatis、Flex4、Spring等技术,通过调用存储过程来优化程序性能。重点讨论了存储过程在减少网络流量、执行计划重用、提高代码维护性和版本控制等方面的优势。通过具体实例展示了如何在Java中通过Ibatis配置文件调用存储过程,并返回结果,以实现高效的数据操作。同时,强调了存储过程在实现业务逻辑自动化、提高代码可读性和安全性方面的作用。

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

 

 

 

内容概要:本文介绍了一个针对电力系统连锁故障传播路径的N-k多阶段双层优化及故障场景筛选模型,该模型基于混合整数线性规划(MILP)方法构建,旨在全面评估电力系统在遭受多重故障时的脆弱性与恢复能力。通过引入故障传播路径的概念,模型能够动态模拟故障在电网中的逐级扩散过程,并结合多阶段优化策略,实现对关键故障场景的有效识别与优先排序。整个框架不仅考虑了初始故障元件的选取,还涵盖了后续因潮流转移引发的级联跳闸行为,从而提升了风险评估的准确性与时效性。该研究已在Matlab平台上完成代码实现,具备良好的可复现性和工程应用价值,适用于提升现代电网的安全防御水平。; 适合人群:电力系统、能源安全及相关领域的科研人员、高校研究生以及从事电网规划与运行管理的工程技术人员。; 使用场景及目标:①用于电力系统安全评估中识别最危险的N-k故障组合;②支撑电网应急预案制定与薄弱环节改造;③作为学术研究中关于级联故障建模与优化求解的教学与验证工具;④服务于智能电网背景下抵御蓄意攻击或极端事件的风险防控决策。; 阅读建议:建议读者结合Matlab代码深入理解模型的数学 formulation 与求解流程,重点关注目标函数设计、约束条件构建及双层优化结构的实现逻辑,同时可通过调整系统参数和故障设定进行仿真对比分析,以掌握不同因素对连锁故障演化的影响规律。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值