SpringBoot 中调用存储过程的方法

1 在 XXXmapper.xml 文件中

<select id="callProOutStock" parameterType="map" statementType="CALLABLE" resultType="int">
    {
        call pro_out_stock(
            #{deptId, mode=IN, jdbcType=VARCHAR},
            #{goodsNo, mode=IN, jdbcType=VARCHAR},
            #{storageNo, mode=IN, jdbcType=VARCHAR},
            #{amount, mode=IN, jdbcType=NUMERIC},
            #{result, mode=OUT, jdbcType=NUMERIC}
        )
    }
    </select>

2 在 XXXmapper.java中

int callProOutStock(@Param("deptId") String deptId, @Param("goodsNo") String goodsNo, @Param("storageNo") String storageNo, @Param("amount") int amount, @Param("result") int result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 首先,在数据库创建存储过程,该存储过程需要返回游标。 2. 在MyBatis的mapper文件,编写一个select语句,使用resultMap将返回结果映射到Java对象。 3. 在mapper文件,编写一个调用存储过程的语句,使用resultType将返回结果映射到Java对象。 4. 在Java代码调用mapper方法,获取返回结果,即可得到存储过程返回的游标数据。 具体实现步骤如下: 1. 在数据库创建存储过程,该存储过程需要返回游标。 例如,下面是一个返回游标的存储过程: ``` CREATE OR REPLACE PROCEDURE get_user_list(p_cursor OUT SYS_REFCURSOR) IS BEGIN OPEN p_cursor FOR SELECT * FROM users; END; ``` 2. 在MyBatis的mapper文件,编写一个select语句,使用resultMap将返回结果映射到Java对象。 例如,下面是一个使用resultMap的select语句: ``` <select id="getUserList" resultMap="userResultMap"> SELECT * FROM users; </select> <resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="name" column="user_name"/> <result property="age" column="user_age"/> </resultMap> ``` 3. 在mapper文件,编写一个调用存储过程的语句,使用resultType将返回结果映射到Java对象。 例如,下面是一个调用存储过程的语句: ``` <select id="getUserList" statementType="CALLABLE" parameterType="java.util.Map" resultType="User"> {CALL get_user_list(#{cursor, mode=OUT, jdbcType=CURSOR, javaType=java.sql.ResultSet, resultMap=userResultMap})} </select> ``` 4. 在Java代码调用mapper方法,获取返回结果,即可得到存储过程返回的游标数据。 例如,下面是一个获取存储过程返回结果的Java代码: ``` SqlSession session = sessionFactory.openSession(); try { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("cursor", null); session.selectOne("getUserList", paramMap); ResultSet rs = (ResultSet)paramMap.get("cursor"); while (rs.next()) { User user = new User(); user.setId(rs.getInt("user_id")); user.setName(rs.getString("user_name")); user.setAge(rs.getInt("user_age")); userList.add(user); } } finally { session.close(); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值