zoukankan      html  css  js  c++  java
  • Mybatis调用存储过程完成用户注册

    需求:用户注册时检测用户名是否已存在,不存在从序列中生成一个序号进行注册,存在返回失败。

    对存储过程了解的比较少,尝试写的存储过程。

    存储过程

    最初版

    create or replace PROCEDURE XTEL_ADD_USERINFO 
    (
      UNAME IN VARCHAR2 
    , PWD IN VARCHAR2 
    , ADD_RET OUT INTEGER
    ) AS 
    curTimestamp INTEGER;
    BEGIN
        -- 查询表中是否有UNAME的记录
        select -1 into ADD_RET from XTEL_USERINFOTABLE where XTEL_USERINFOTABLE.USERNAME=UNAME;
        exception
        when no_data_found then
        begin
        -- 没有查到相应记录,则会进入这里。
        -- 为其新增一条记录,并为其创建一张对应的历史消息记录表
        ADD_RET := USERINFO_SQ.NEXTVAL;
        GET_CURTIMESTAMP(curTimestamp);
        insert into XTEL_USERINFOTABLE(USERNAME, USERID, GROUPID, REGISTTIME, PURCHASEDCOURSE,
        PASSCOURSE, EXCELLENTCOURSE, LEARNINGCOURSE, COMPLETECOURSE, LECTURES, ISONLINE, LOGINTIME, 
        "PASSWORD", STATUS, NICKNAME) 
        values(UNAME, ADD_RET, 0, curTimestamp, 0, 
        0, 0, 0, 0, 0, 0, 0, 
        PWD, 0, UNAME);
        end;
        -- insert or update之后必须Commit,这样才能将操作实际性的应用到表上。
        Commit;
    END XTEL_ADD_USERINFO;

    修改版。

    create or replace PROCEDURE XTEL_ADD_USERINFO 
    (
      UNAME IN VARCHAR2 
    , PWD IN VARCHAR2 
    , ADD_RET OUT INTEGER
    ) AS 
    curTimestamp INTEGER;
    BEGIN
        -- 查询表中是否有UNAME的记录
        select -1 into ADD_RET from XTEL_USERINFOTABLE where XTEL_USERINFOTABLE.USERNAME=UNAME;
        exception
        when no_data_found then
        begin
        -- 没有查到相应记录,则会进入这里。
        -- 为其新增一条记录,并为其创建一张对应的历史消息记录表
        ADD_RET := USERINFO_SQ.NEXTVAL;
        GET_CURTIMESTAMP(curTimestamp);
        insert into XTEL_USERINFOTABLE(USERNAME, USERID, GROUPID, REGISTTIME, PURCHASEDCOURSE,
        PASSCOURSE, EXCELLENTCOURSE, LEARNINGCOURSE, COMPLETECOURSE, LECTURES, ISONLINE, LOGINTIME, 
        "PASSWORD", STATUS, NICKNAME) 
        values(UNAME, ADD_RET, 0, curTimestamp, 0, 
        0, 0, 0, 0, 0, 0, 0, 
        PWD, 0, UNAME);
        end;
        -- insert or update之后必须Commit,这样才能将操作实际性的应用到表上。
        Commit;
    END XTEL_ADD_USERINFO;
    

     mybatis 调用

    	<!-- 新增用户,调用存储过程 -->
     <select id="addUser" statementType="CALLABLE" parameterType="java.util.HashMap"  >
           <![CDATA[
               {call US246.XTEL_SIGUP(
                  #{uName,mode=IN,jdbcType=VARCHAR},
                  #{pwd,mode=IN,jdbcType=VARCHAR},
                  #{returnValue,mode=OUT,jdbcType=INTEGER}
               )}    
           ]]>

     注意:返回的结果是返回到paramMap中,开始一直以为是存储过程写错了,然后试着写了function函数,一样没有返回值。最终发现它返回到了传递的参数map中

            Map<String, Object> paramMap = new HashMap<String, Object>();
            //把密码进行加密处理
            password = MD5.toMD5(password); 
            paramMap.put("uName", userName);
            paramMap.put("pwd", password);
            paramMap.put("returnValue", 1);
            userDao.addUser(paramMap);
            if((int)paramMap.get("returnValue")==0){
                return new ResJson(SysConstants.STRING_ZERO,"用户名已存在");
            }
            return new ResJson(SysConstants.STRING_ONE,"注册成功");
        }
  • 相关阅读:
    Ubuntu下配置PHP和CakePHP记录
    VMware Workstation “以独占方式锁定此配置文件失败。可能其它正在运行VMware进程在使用此配置文件”
    c语言结构体链表
    Linux下VNC配置使用总结:开启+桌面配置+安全访问
    git服务器使用
    MYSQL外键(Foreign Key)的使用
    MySQL 安装与使用(三)
    Percona XtraBackup的部分备份与恢复/单库备份/单表备份/指定库备份/指定表备份
    Percona XtraBackup 核心文档
    mysql 半同步复制 插件安装以及测试
  • 原文地址:https://www.cnblogs.com/magic101/p/9439064.html
Copyright © 2011-2022 走看看