存储过程可以让我们的数据库操作的效率变高,因为存储过程是提前编译好了。不同于我们发送一条SQL,每次都需要经历系列步骤(语法检查——语义分析——编译——缓存——执行),使用存储过程的话直接就是执行编译好的内容,这样有利于提升系统的性能,尤其是在高并发的情况下这样的效果应该是最为明显的。那么接下来我就分享一下我是如何使用Oracle的存储过程的吧!文中的JdbcType与相应的JavaType可参照我的另一篇博客:
jdbcType与Java类型对应关系表格
1. 查询数据
1.1 定义package以及存储过程
--定义package
CREATE OR REPLACE PACKAGE pk_rainQuality IS
TYPE rainQuality_cursor IS REF CURSOR;
END pk_rainQuality;
--定义存储过程
CREATE OR REPLACE PROCEDURE getRainQulity
(
startIndex IN NUMBER,
maxIndex IN NUMBER,
r_rainQulity OUT pk_rainQuality.rainQuality_cursor
) AS
BEGIN
--分页查询语句
OPEN r_rainQulity FOR
SELECT * FROM (
SELECT q1.*,ROWNUM rownum_ FROM(
SELECT * FROM rainQuality
ORDER BY monitorTime DESC
) q1 WHERE ROWNUM<=maxIndex
) q2 WHERE rownum_>startIndex;
END;
1.2 业务逻辑层代码实现,使用Map集合用于保存返回结果以及参数
package com.qingyun.rainQuality.service;
import com.qingyun.rainQuality.dao.RainQualityMapper;
import com.qingyun.rainQuality.pojo.RainQuality;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
@Service
public class RainQualityServiceImpl implements RainQualityService{
@Resource
RainQualityMapper rainQualityMapper;
/**
* 获取总记录数
*/
@Override
public Integer getRainQualityCount() {
HashMap<String,Object> map=new HashMap<String,Object>();
rainQualityMapper.getRainQualityCount(map);
return (Integer) map.get("count");
}
/**
* 获取所有雨量信息记录
*
* @param startIndex
* @param maxIndex
*/
@Override
public List<RainQuality> getRainQualityList(Integer startIndex, Integer maxIndex) {
HashMap<String