java使用mybatis调用存储过程返回一个游标结果集方式

 更新时间:2024年01月27日 09:57:14   作者:瀚高PG实验室  
这篇文章主要介绍了java使用mybatis调用存储过程返回一个游标结果集方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

环境

  • 系统平台:IBM:Linux on System z Red Hat Enterprise Linux 7
  • 版本:6.0,4.5

文档用途

  • mybatis调用存储过程返回游标接收结果集。

详细信息

1.service实现类

@Override
@Transactional
public List<HighgoFunOneRefcursorEntity> getOneRefcursor(Integer id) {

    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("id", id);
    highgoFunOneRefcursorDao.getOneRefcursor(map);
    List<HighgoFunOneRefcursorEntity> list = (List<HighgoFunOneRefcursorEntity>)map.get("result");

    return list;
}

2.dao层

@Mapper
public interface HighgoProOneRefcursorDao extends BaseMapper<HighgoProOneRefcursorEntity> {
    ArrayList<Map<String, Object>> getProOneRefcursor(HashMap map);

}

3.mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.database.mybatisplus.modules.demo.dao.HighgoProOneRefcursorDao">

   <!-- 可根据自己的需求,是否要使用 -->
    <resultMap type="com.database.mybatisplus.modules.demo.entity.HighgoProOneRefcursorEntity" id="highgoProOneRefcursorMap">
        <result property="hanzi" column="hanzi"/>
        <result property="quanpin" column="quanpin"/>
        <result property="szm" column="szm"/>
        <result property="duyin" column="duyin"/>
        <result property="numbersd" column="numbersd"/>
        <result property="sd" column="sd"/>
        <result property="repsd" column="repsd"/>
        <result property="hzascii" column="hzascii"/>
    </resultMap>

    <!-- 调用存储过程返回一个游标 -->
    <select id="getProOneRefcursor" parameterType="map" statementType="CALLABLE" resultType="java.util.Map">
        {call sp_one_refcursor(#{id,mode=IN},null,#{result,mode=OUT,jdbcType=OTHER,javaType=ResultSet,resultMap=highgoFunOneRefcursorMap})}
    </select>

</mapper>

4.数据库过程

CREATE OR REPLACE PROCEDURE test.sp_one_refcursor(integer, INOUT refcursor)
 LANGUAGE plpgsql
AS $procedure$
begin
    if $1 = 1 then 
        open $2 for select * from hzpyszm limit 100;
    elseif $1 = 2 then
        open $2 for select hanzi,quanpin,szm,duyin from hzpyszm limit 100;
    else 
        open $2 for select hanzi,quanpin from hzpyszm limit 100;
    end if;
    exception when others then
        raise exception 'sql exception--%',sqlerrm;
end;
$procedure$
;

5.jdbc参数

url: jdbc:highgo://192.168.21.138:5870/test?escapeSyntaxCallMode=callIfNoReturn

6.数据库表

CREATE TABLE hzpyszm (
    hanzi varchar(4) NULL,
    quanpin varchar(10) NULL,
    szm varchar(5) NULL,
    duyin varchar(10) NULL,
    numbersd varchar(1) NULL,
    sd varchar(5) NULL,
    repsd varchar(5) NULL,
    hzascii int8 NULL
);
CREATE INDEX hzpyszm_hanzi_idx ON test.hzpyszm USING btree (hanzi varchar_pattern_ops);

INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('唔', 'ngn', 'n', 'ńgń', '2', NULL, NULL, 21780);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匌', 'ge', 'g', 'gé', '2', 'é', 'e', 21260);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匍', 'pu', 'p', 'pú', '2', 'ú', 'u', 21261);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匎', 'e', 'e', 'è', '4', 'è', 'e', 21262);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匏', 'pao', 'p', 'páo', '2', 'á', 'a', 21263);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匐', 'fu', 'f', 'fú', '2', 'ú', 'u', 21264);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匑', 'gong', 'g', 'gōng', '1', 'ō', 'o', 21265);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匒', 'da', 'd', 'dá', '2', 'á', 'a', 21266);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匓', 'jiu', 'j', 'jiù', '4', 'ù', 'u', 21267);
INSERT INTO hzpyszm (hanzi, quanpin, szm, duyin, numbersd, sd, repsd, hzascii) VALUES('匔', 'gong', 'g', 'gōng', '1', 'ō', 'o', 21268);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于@Data和@Builder注解解析

    关于@Data和@Builder注解解析

    在使用Lombok库时,@Data和@Builder注解混用可能会导致编译失败,解决方法包括添加@NoArgsConstructor和@AllArgsConstructor注解,或者重写无参构造器并注解@Tolerate,这是因为@Data自动生成的构造器与@Builder的构造模式存在冲突
    2024-10-10
  • Spring Cloud 系列之负载均衡 Ribbon的示例代码

    Spring Cloud 系列之负载均衡 Ribbon的示例代码

    Ribbon 是 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 客户端的行为。这篇文章主要介绍了Spring Cloud 系列之负载均衡 Ribbon的示例代码,需要的朋友可以参考下
    2020-11-11
  • Java中的布隆过滤器原理实现和应用

    Java中的布隆过滤器原理实现和应用

    Java中的布隆过滤器是一种基于哈希函数的数据结构,能够高效地判断元素是否存在于一个集合中。它广泛应用于缓存、网络协议、数据查询等领域,在提高程序性能和减少资源消耗方面具有显著优势
    2023-04-04
  • 入门Java线程基础一篇就够了

    入门Java线程基础一篇就够了

    线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
    2021-06-06
  • 详解Java中的时区类TimeZone的用法

    详解Java中的时区类TimeZone的用法

    TimeZone可以用来获取或者规定时区,也可以用来计算时差,这里我们就来详解Java中的时区类TimeZone的用法,特别要注意下面所提到的TimeZone相关的时间校准问题.
    2016-06-06
  • Java对象以Hash结构存入Redis详解

    Java对象以Hash结构存入Redis详解

    这篇文章主要介绍了Java对象以Hash结构存入Redis详解,和Java中的对象非常相似,却不能按照Java对象的结构直接存储进Redis的hash中,因为Java对象中的field是可以嵌套的,而Redis的Hash结构不支持嵌套结构,需要的朋友可以参考下
    2023-08-08
  • springboot配置多数据源的实例(MongoDB主从)

    springboot配置多数据源的实例(MongoDB主从)

    下面小编就为大家分享一篇springboot配置多数据源的实例(MongoDB主从),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java中的Future获取任务返回值详解

    Java中的Future获取任务返回值详解

    这篇文章主要介绍了Java中的Future获取任务返回值详解,在向线程池ThreadPoolExecutor提交任务时,一般为了方便操作采用execute提交任务,这时线程其实是无返回值的,需要的朋友可以参考下
    2023-12-12
  • Spring事务捕获异常后依旧回滚的解决

    Spring事务捕获异常后依旧回滚的解决

    本文主要介绍了Spring事务捕获异常后依旧回滚的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java中BufferedReader和BufferedWriter使用方式

    Java中BufferedReader和BufferedWriter使用方式

    这篇文章主要介绍了Java中BufferedReader和BufferedWriter使用方式,FileWriter 类从 OutputStreamWriter 类继承而来,BufferedReader 类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行
    2022-06-06

最新评论