From《MyBatis从入门到精通》

    <!--
        6.2 存储过程

        6.2.1 第一个存储过程
            delimiter ;;
            create procedure 'select_user_by_id'(
                in userId bigint,
                out userName varchar(50),
                out userPassword varchar(50),
                out userEmail varchar(50),
                out userInfo TEXT,
                out headImg blob,
                out createTime datetime)
            begin
                select user_name,user_password,user_email,user_info,user_info,head_img,create_time
                into userName,userPassword,userEmail,userInfo,headImg,createTime
                from sys_user
                where id=userId;
            end
            ;;
            delimiter ;
    -->

    <!--
        存储过程不支持MyBatis的二级缓存,因此为了避免缓存配置出错,
        直接将select标签的useCache属性设置为false。headImg还特
        别设置了javaType。在MyBatis映射的Java类中,不推荐使用基本
        类型,数据库BLOB类型对应的Java类型通常都是写长bute[]字节数
        组的形式的,且byte是基本类型,所以在设置javaType时,要使用
        带下划线的方式。如果不设置,则MyBatis默认使用Byte类型
    -->
    <select id="selectUserById" statementType="CALLABLE" useCache="false">
        {call select_user_by_id(
          #{id,mode=IN},
          #{userName,mode=OUT,jdbcType=VARCHAR},
          #{userPassword,mode=OUT,jdbcType=VARCHAR},
          #{userEmail,mode=OUT,jdbcType=VARCHAR},
          #{userInfo,mode=OUT,jdbcType=VARCHAR},
          #{headImg,mode=OUT,jdbcType=BLOB,javaType=_byte[]},
          #{createTime,mode=OUT,jdbcType=TIMESTAMP}
        )}
    </select>

    <!--
        6.2.2 第二个存储过程

            delimiter ;;
            create procedure 'select_user_page'(
                in userName varchar(50),
                in _offset bigint,
                in _limit bigint,
                out total bigint)
            begin
                # 查寻数据总数
                select count(*) into total
                from sys_user
                where user_name like concat('%',userName,'%')

                #分页查询数据
                select * from sys_user
                where user_name like concat('%',userName,'%')
                limit _offset, _limit;
            end
            ;;
            delimiter ;;
    -->

    <select id="selectUserPage" statementType="CALLABLE" useCache="false"
            resultMap="userMap">
        {call select_user_page(
          #{userName,mode=IN),
          #{offset,mode=IN),
          #{limit,mode=IN),
          #{total,mode=OUT,jadbType=biging}
        )}
    </select>

    <!--
        6.2.3 第三个和第四存储过程

            # 第三个存储过程
            # 保存用户信息和角色关联信息
            delimiter ;;
            create procedure 'insert_user_and_roles'
                out userId bigint,
                in userName varchar(50),
                in userPassword varchar(50),
                in userEmail varchar(50),
                in userInfo text,
                in headImg blob,
                out createTime datetime,
                in roleIds varchar(200))
            begin
            #设置当前时间
            set crateTime=NOW();

            #插入数据
            insert into sys_user(user_name,user_password,user_email,user_info,head_img,create_time)
            values (userName,userPassword,userEmail,userInfo,headImg,createTime);

            #获取自增主键
            select last_insert_id() into userId;

            #保存用户和角色关系数据
            set roleIds = concat(',',roleIds,',');
            insert into sys_user_role(user_id,role_id);
            select userId, id from sys_role
            where instr(roleIds,concat(',',id,','))>0;
        end
        ;;
        delimiter ;
    -->
    <insert id="insertUserAndRoles" statementType="CALLABLE">
        {call insert_user_and_roles(
          #{user.id,mode=OUT,jdbcType=BIGINT},
          #{user.userName,mode=in},
          #{user.userPassword,mode=in},
          #{user.Email,mode=in},
          #{user.Info,mode=in},
          #{user.headImg,mode=in},
          #{user.createTime,mode=OUT,jdbcType=TIMESTAMP},
          #{roleIds,mode=IN}
        )}
    </insert>

    <!--
            #第四个存储过程
            delimiter ;;
                create procedure 'delete_user_by_id'(in userId bigint)
                begin
                    delete from sys_user_role where user_id=userId;
                    delete from sys_user where id=userId;
                end
                ;;
            delimiter;;
    -->
    <delete id="deleUserById" statementType="CALLABLE">
        {call delete_user_by_id(#{id,mode=in})}
    </delete>

MyBatis 存储过程的更多相关文章

  1. mysql+mybatis+存储过程+事务 + 多并发流水号获取

    数据库存储过程 drop PROCEDURE generate_serial_number; CREATE PROCEDURE generate_serial_number( ), IN param_ ...

  2. mybatis 存储过程与游标的使用

    MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所 ...

  3. MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...

  4. mybatis 存储过程调用

    接口 UserInfoMapper.java xml   UserInfoMapper.xml 如何关联 <?xml version="1.0" encoding=" ...

  5. mybatis 存储过程的写法

    (注意事项: 在使用游标的时候,不能在游标声明之前,使用crud) 存储过程示例 CREATE DEFINER=`root`@`::` PROCEDURE `earnings_proceduce`() ...

  6. mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储

    存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的 ...

  7. MyBatis学习总结(六)——调用存储过程(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...

  8. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  9. java, mybatis, 调用mysql存储过程

    Map<String, Object> bindinfo = new HashMap<String, Object>();            bindinfo.put(&q ...

随机推荐

  1. Win10《芒果TV》更新v3.5.2星玥版:修复电视台直播异常,优化添加下载提示

    Win10版<芒果TV>在更新夏至版之后,根据收集到的热心用户反馈,全平台同步更新星玥版v3.5.2,修复电视台直播异常,优化添加下载提示,进一步提升使用体验. Win10版<芒果T ...

  2. Windows10 1607 x64/x86 + Office 2016 Win/Mac + KMS激活/安装密钥汇总

    各位观众,这里汇总了一份最新微软系统和办公软件的资源清单,希望对你们有帮助. Windows10 1607 For x64 ed2k://|file|cn_windows_10_multiple_ed ...

  3. PRML Chapter3

    曲线拟合的几种方法 最大似然估计MLE,最大后验概率MAP:MLE和MAP MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即"模型已定, ...

  4. Delphi 10.2 Linux 程序开发环境部署的基本步骤(网络连接方式要选择桥接或者是Host Only)

    Delphi 10.2 Linux 程序开发环境部署的基本步骤 http://blog.qdac.cc/?p=4477 升級到 Delphi 10.2 Tokyo 笔记http://www.cnblo ...

  5. 在Window和Linux下使用Zthread库(跨平台高级面向对象的线性和sycnchronization 库)

    ZThread库是一个开源的跨平台高级面向对象的线性和sycnchronization 库,以运行POSIX 和Win32 系统中的C++程序. ZThread库的主页:http://zthread. ...

  6. 智能合约开发——以太坊 DApp 实现 购买通证token

    合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...

  7. Qt 5 最小构建笔记(只编译QtBase)

    只想用Qt5最基本的功能,因此只编译QtBase.也不想为了编译一个Qt装很多东西(比如非常肥的DirectX SDK) 软件清单: Visual Studio 2010 Professional w ...

  8. Memory Ordering (注意Cache带来的副作用,每个CPU都有自己的Cache,内存读写不再一定需要真的作内存访问)

    Memory Ordering   Background 很久很久很久以前,CPU忠厚老实,一条一条指令的执行我们给它的程序,规规矩矩的进行计算和内存的存取. 很久很久以前, CPU学会了Out-Of ...

  9. KM算法 详解+模板

    先说KM算法求二分图的最佳匹配思想,再详讲KM的实现.[KM算法求二分图的最佳匹配思想] 对于具有二部划分( V1, V2 )的加权完全二分图,其中 V1= { x1, x2, x3, ... , x ...

  10. Java的String类字符串的拆分

    在java编程中,有时候我们需要把一个字符串按照某个特定字符.字母等作为截点分割这个字符串, 这样我们就可以使用这个字符串的一部分或者把所有截取的内容保存到数组里等操作. public class S ...