• 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,"注册成功");
        }
  • 相关阅读:
    An unknown Subversion error occurred. (code = 155037)
    github Mac端的使用案例
    响应式布局的三大要点
    手机web——自适应网页设计(html/css控制)
    移动页面自适应手机屏幕宽度
    js判断手机访问跳转到手机站
    针对IE的CSS hack 全面 实用
    jQuery片段
    CSS Sprite初探之原理、使用
    10 个优秀的JavaScript开发框架
  • 原文地址:https://www.cnblogs.com/magic101/p/9439064.html
Copyright © 2020-2023  润新知