`

Ibatis调用存储过程

阅读更多

Ibatis调用存储过程

procedure.xml的ibatis配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="PROCEDURE">

<!--
- =======================================================
- 授权用户某个设备得权限
- =======================================================
-->
<parameterMap class="map" id="proPermissionDevicePerson">
   <parameter property="deviceId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
   <parameter property="deviceType" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
   <parameter property="permissionType" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
   <parameter property="userId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
   <parameter property="result" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
</parameterMap>

<procedure id="shareDeviceToPerson" parameterMap="proPermissionDevicePerson">
   <![CDATA[
      {call share_dev_prv_to_person (?,?,?,?,?)}
   ]]>
</procedure>
</sqlMap>


JAVA调用实现PermissionDAOIbatisImpl.java如下:

// 授权设备给用户
public static final String SHARE_DEVICE_TO_PERSON = "PROCEDURE.shareDeviceToPerson";

/**
* 授权某个设备给某个用户
* @param userPermission
*/
public boolean shareDeviceToPerson(UserPermission userPermission) {
Map map = new HashMap();
boolean flag = false;
map.put("deviceId", userPermission.getDeviceId());
map.put("deviceType", userPermission.getDeviceType());
map.put("userId", userPermission.getUserId());
map.put("permissionType", userPermission.getPermissionType());
try {
   getSqlMapClientTemplate().insert(SHARE_DEVICE_TO_PERSON, map);
   String result = (String) map.get("result");
   //得到返回值
   if (StringUtil.isNotBlank(result) && "2".equalsIgnoreCase(result)) {
    flag = true;
   }
} catch (Exception e) {
   throw new DaoException("DAOException: " + e);
}
return flag;
}

存储过程的实现代码,嘿嘿。完全不了解,以后有机会学习一下存储过程

create or replace procedure share_dev_prv_to_person(deviceId   in varchar2,
                                                    type       in varchar2,
                                                    permission in varchar2,
                                                    userId     in varchar2,
                                                    result     out varchar2) as

/**
deviceId 设备id
tyoe      设备类型
permission 权限类型
userId     用户id
*/

v_role_id         varchar2(31);
v_organ_id        varchar2(31);
v_permission_id   varchar2(31);
v_type            varchar2(31);
v_permission_type varchar2(200);
v_is_exists       int;
begin

result := '1';

select encodeID(TROLE_SEQ.nextval) into v_role_id from dual;

--convert type
if type = 1 then
    v_type := 'general_camera_vic';
elsif type = 2 then
    v_type := 'ip_camera_vic';
elsif type = 3 then
    v_type := 'alarm_input_channel';
elsif type = 4 then
    v_type := 'alarm_output_channel';
end if;

--convert permission type
if permission = 1 then
    v_permission_type := 'vic_realtime_video_play_operation';
elsif permission = 2 then
    v_permission_type := 'aic_operation';
elsif permission = 3 then
    v_permission_type := 'aoc_open_close_operation';
end if;

-- insert role
begin
    select id
      into v_role_id
      from T_ROLE
     where F_NAME = deviceId || '角色' || type || '_' || permission;

    select 1
      into v_is_exists
      from permission        pp,
           T_ROLE            role,
           R_USER_ROLE       ru,
           R_ROLE_PERMISSION rrp
     where role.f_name = deviceId || '角色' || type || '_' || permission
       and ru.user_id = userId
       and rrp.ROLE_ID = role.id
       and rrp.PERMISSION_ID = pp.id;

exception
    when No_data_found then
      dbms_output.put_line('no role founed!!');
   
      select organ_id into v_organ_id from t_user where id = userId;
   
      INSERT INTO T_ROLE
        (ID, F_NAME, NOTE, ORGAN_ID, CREATE_PERSON)
      VALUES
        (v_role_id,
         deviceId || '角色' || type || '_' || permission,
         deviceId || '角色' || type || '_' || permission,
         v_organ_id,
         userId);
   
      -- grant role permission
      select id
        into v_permission_id
        from permission t
       where t.resource_id = deviceId
         and t.operation = v_permission_type
         and t.resource_type = v_type;
   
      INSERT INTO R_ROLE_PERMISSION
        (PERMISSION_ID, ROLE_ID)
      VALUES
        (v_permission_id, v_role_id);
   
      -- grant role to other person
      INSERT INTO R_USER_ROLE
        (ROLE_ID, USER_ID)
      VALUES
        (v_role_id, userId);
end;

commit;

result := '2';

end;

分享到:
评论

相关推荐

    ibatIS调用存储过程

    ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...

    ibatis调用存储过程

    在Java开发中,iBATIS(现在被称为MyBatis)是一个流行的数据持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化数据库操作。...希望这个示例能帮助你更好地理解iBATIS调用存储过程的方法。

    IBATIS调用存储过程

    首先,理解iBATIS调用存储过程的基本原理。iBATIS允许开发者在映射文件中定义存储过程调用,通过`&lt;procedure&gt;`标签来实现。在这个例子中,我们看到一个名为`P_DJ_GETRYANDPYRBYRYID`的存储过程被调用,它接受三个...

    ibatis调用存储过程.txt

    根据提供的文件信息,标题为“ibatis调用存储过程”,主要关注的是如何使用ibatis框架来调用数据库中的存储过程。下面将详细解释ibatis框架的基本概念、存储过程的概念以及如何在ibatis中配置和执行存储过程。 ### ...

    ibatis调用存储过程介绍

    本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...

    iBatis调用存储过程

    iBatis调用存储过程

    Ibatis调用存储过程调用存储过程

    ### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    ibatis调存储过程返回游标

    本文将深入探讨如何使用iBatis调用存储过程并返回游标,这是一个在处理复杂数据库操作时常见的需求。 ### iBatis调用存储过程返回游标 #### 存储过程简介 存储过程是预先编译并存储在数据库中的SQL代码块,它可以...

    ibatis调用oracle存储过程

    最后,在Java代码中,通过ibatis的Session对象调用存储过程,传入必要的参数,处理返回的结果集。 ```java SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources....

    Ibatis调用Oracle存储过程返回自定义类型

    #### 使用Ibatis调用存储过程 Ibatis是一个Java持久层框架,它能够简化Java应用程序与数据库之间的交互。为了调用上述存储过程并正确处理返回值,我们需要进行以下配置: ##### 日志配置(log4j.properties) ```...

    ibatis与存储过程(带输出参数的应用)

    在实际项目中,使用Ibatis调用存储过程时,还应注意以下几点: 1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java...

    IBatis查删改查与调用存储过程 mysql数据库

    "IBatis查删改查与调用存储过程 mysql数据库" 这个标题揭示了本文将深入探讨如何使用IBatis框架在MySQL数据库中执行基本的CRUD(创建、读取、更新、删除)操作,以及如何调用存储过程。IBatis是一个轻量级的Java持久...

    ibatis官方中文文档

    学习这两份文档,开发者不仅可以理解iBATIS的基本工作原理,还能掌握如何高效地利用iBATIS调用存储过程,提高数据库操作的灵活性和性能。对于Java开发者,尤其是从事Web应用开发的人员,深入理解和熟练运用iBATIS是...

    ibatis调用oracle的函数,存储过程的方法

    调用存储过程: ```java Map, Object&gt; params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...

    J2EE+Spring+Ibatis2+blazeds存储过程调用返回结果集

    在这个项目中,我们结合了Spring框架、Ibatis持久层框架以及Blazeds技术,来演示如何调用存储过程并处理返回的结果集。下面将详细讲解这些技术的运用。 首先,J2EE是一种广泛用于开发分布式企业应用的平台,它提供...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...

    iBatis 轻量级持久层架构

    2. **iBatis调用存储过程**: iBatis允许开发者直接调用数据库的存储过程。在XML映射文件中,使用`&lt;procedure&gt;`标签来定义存储过程的调用,指定存储过程的名称和参数。存储过程的输入和输出参数通过`&lt;parameterMap&gt;...

    IBatis中的存储过程应用实例

    在IT行业中,数据库操作是不可或缺的一部分,而IBatis作为一款流行的数据映射框架,提供了一种灵活的方式来处理SQL语句,包括调用存储过程。存储过程是数据库中预编译的SQL语句集合,可以提高性能、增强安全性,并...

Global site tag (gtag.js) - Google Analytics