`
dmcp
  • 浏览: 24434 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

myBatis3执行存储过程

 
阅读更多

使用myBatis3执行存储过程不像iBatis2那样,有procedure这样的标签可以供使用,如下为iBatis2的使用方法:

<procedure id="provCitySplit" parameterMap="provCitySplitParameterMap" resultClass="java.lang.Long">

  {call PKG_SUB_POLICY.PROV_CITY_SPLIT(?,?,?,?)}

</procedure>

parameterMap="provCitySplitParameterMap"的定义如下:

<parameterMap class="map" id="provCitySplitParameterMap">

  <parameter property="subPolicyId" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="cityId" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="fetchNum" jdbcType="DECIMAL" javaType="java.lang.Long" mode="IN"/>

  <parameter property="resultCode" jdbcType="DECIMAL" javaType="java.lang.Long" mode="OUT"/>

</parameterMap>


java调用方法如下:

@Override

public Long callProvCitySplitProcedure(Long subPolicyId, Long cityId,

    Long fetchNum) throws SQLException {

  Map<String, Long> map = new HashMap<String, Long>();

  map.put("subPolicyId", subPolicyId);

  map.put("cityId", cityId);

  map.put("fetchNum", fetchNum);

  SqlMapSession sqlMapSession = sqlMapClient.openSession();

  try {

    sqlMapSession.update("PROCEDURE.provCitySplit", map);

    Long resultCode = map.get("resultCode");

    return resultCode;          

  } catch (SQLException e) {

    throw new SQLException(e);

  } finally {

    if (sqlMapSession.getCurrentConnection() != null) {

      System.out.println("Get CurrentConnection and close...");

      sqlMapSession.getCurrentConnection().close();

    }

    sqlMapSession.close();

  }

}

而mybatis3已经没有procedure这样的标签,只剩下select来操作存储过程,使用方法如下:

<select id="cancelSubPolicy" statementType="CALLABLE">

    {call p_cancel_sub_policy(#{subPolicyId, jdbcType=NUMERIC, mode=IN},

                              #{canceledCount, jdbcType=NUMERIC, mode=OUT})}

</select>

java调用方法如下:

public long cancelSubPolicy(Integer coreDBId, Long subPolicyId) throws SQLException {

    SqlSession sqlSession = null;

    try {

        sqlSession = sessionFactory.openSession();

        final Map<String, Object> param = new HashMap<String, Object>();

        param.put("subPolicyId", subPolicyId);

        long time = System.currentTimeMillis();

        sqlSession.select("com.ailk.dm.odomain.dms.dao.MultiTaskDao.cancelSubPolicy", param, null);

        log.info("cancelSubPolicy elapsed time: " + (System.currentTimeMillis() - time) + "ms");

        BigDecimal canceledCount = (BigDecimal) param.get("canceledCount");

        // return canceled task count;

        return canceledCount.longValue();

    } catch (PersistenceException pe) {

        log.error("cancelSubPolicy failed: subPolicyId=" + subPolicyId, pe);

        throw new SQLException(pe);

    } finally {

        if (null != sqlSession) sqlSession.close();

    }

}
分享到:
评论

相关推荐

    mybatis调用orclae存储过程

    执行存储过程 当调用`insertEmployee`方法时,MyBatis会执行配置的存储过程,并将结果(如果有的话)返回。在上述例子中,因为`INSERT_EMPLOYEE`没有返回值,所以不需要处理返回结果。 总结,通过以上步骤,我们...

    mybatis调用mysql存储过程

    这里使用`&lt;select&gt;`标签,因为MyBatis会将其识别为一个查询,即使实际上我们是在执行存储过程: ```xml {call addNumbers(#{num1, mode=IN, jdbcType=INTEGER}, #{num2, mode=IN, jdbcType=INTEGER}, #{...

    spring mybatis 调用oracle存储过程

    3. **返回多个结果的存储过程**: 对于返回多个结果集的存储过程,MyBatis提供了`&lt;collection&gt;`标签来处理。在Mapper接口中,需要创建一个方法,接收一个List或者Map作为返回值。在XML配置中,使用`&lt;call&gt;`标签并...

    mybatis调用存储过程

    3. MyBatis调用存储过程的基本步骤 (1)在MyBatis的Mapper XML文件中,定义一个 `&lt;select&gt;` 标签,但使用 `id` 属性标识存储过程的名称,而非SQL查询语句。例如: ```xml {call your_schema.your_procedure(?, ?)...

    spring mvc + mybatis 调用mysql 存储过程

    存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。它们提高了性能,减少了网络传输,并提供了更好的安全性。 在Spring MVC中,控制器(Controller)通常用于接收...

    MyBatis调用存储过程

    - 注意存储过程的权限问题,确保执行用户具有调用该存储过程的权限。 - 对于Oracle等数据库,可能需要使用`{call ...}`而非`call ...`,具体语法取决于所使用的数据库系统。 通过以上步骤,你可以成功地在MyBatis...

    mybatis调用存储过程源码

    在某些情况下,我们可能需要使用存储过程来执行复杂的数据库操作,比如批量处理、事务控制或优化性能等。本教程将详细介绍如何在MyBatis中调用存储过程,并提供一个完整的示例。 首先,存储过程是数据库中预编译的...

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...

    Mybatis调用MySQL存储过程的简单实现

    在实际应用中,通过MyBatis的SqlSession调用这个方法,传入设备名称,MyBatis会自动执行存储过程并将输出参数赋值给`deviceCount`。 然而,存储过程也有其缺点,如不易维护、不利于代码扩展,且可能消耗更多性能。...

    Mybatis调用Oracle存储过程的方法图文详解

    Mybatis调用Oracle存储过程的方法详解 Mybatis是一款流行的持久层框架,广泛应用于Java企业级应用开发中。 Oracle存储过程是一种高效的数据库操作方式,通过存储过程可以实现复杂的业务逻辑操作。那么,如何使用...

    JAVA通过MyBatis调用MySql存储过程和函数doc文档合集整理.zip

    3. **在MyBatis中调用存储过程** - 在Mapper接口中定义方法,方法名与存储过程名相同。 - 使用`@SelectProcedure`或在XML映射文件中配置`&lt;select id="procName" statementType="CALLABLE"&gt;`,指定存储过程。 - ...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    在本文中,我们将探讨如何在Mybatis框架中调用PostgreSQL的存储过程,特别是处理 PostgreSQL 的数组类型作为存储过程的输入参数。Mybatis是一个流行的Java持久层框架,它允许开发者编写SQL语句,并与Java对象进行...

    MySql存储过程以及MyBatis3

    2. **调用存储过程**:通过`CALL`关键字来执行存储过程。 3. **参数**:存储过程可以接受输入参数,输出参数,或者两者都有,用于传递数据到过程内部或从过程返回结果。 4. **返回值**:使用`RETURN`语句设置存储...

    Mybatis传list参数调用oracle存储过程的解决方法

    3. 创建存储过程 接下来,我们创建一个名为save_unit_power的存储过程,该过程将接受一个unit_menu_table类型的参数,并将其插入到ZD_UNIT_MENU表中。我们使用FOR循环来遍历参数列表,并使用execute immediate语句...

    MyBatis3官方中文文档

    MyBatis可以与各种数据库交互,并支持定制化SQL、存储过程以及高级映射。在了解MyBatis之前,我们需要明白持久层框架的作用主要是用于解决Java应用程序与数据库之间的交互问题。 首先,MyBatis的入门安装很简单,...

    mybatis调用储存过程

    对于`OUT`参数,MyBatis会在执行完存储过程后自动填充。 5. **在Service层调用**:在业务逻辑层,你可以注入`ProcedureMapper`接口,并调用`callProcedure()`方法。对于`OUT`参数,你可以在方法调用后立即获取其值...

    3、mybatis存储过程和函数的调用1

    2. 返回数值的存储过程(标量存储过程):执行后返回一个单一的值,比如数据库中的函数或命令。 3. 行为存储过程:不返回值,主要用于实现数据库的特定功能,如更新和删除操作。 在第二部分,我们将看到如何接收...

    MyBatis3 API 中文文档

    它支持普通的SQL查询、存储过程和高级映射,可以用来处理复杂的SQL,例如联表查询等,并且支持动态SQL语句,这在处理有较多条件判断的场景时尤其有用。 2. MyBatis核心组件 - SqlSessionFactory:它是创建...

    mybatis3.x源码深度解析与最佳实践.pdf

    存储过程与函数调用实现是 MyBatis 中的核心机制,该机制负责将存储过程和函数调用实现。 4.5 MyBatis 事务实现 MyBatis 事务实现是 MyBatis 中的核心机制,该机制负责将事务实现。 4.6 缓存 缓存是 MyBatis 中...

Global site tag (gtag.js) - Google Analytics