MyBatis 存储过程
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 存储过程的更多相关文章
- mysql+mybatis+存储过程+事务 + 多并发流水号获取
数据库存储过程 drop PROCEDURE generate_serial_number; CREATE PROCEDURE generate_serial_number( ), IN param_ ...
- mybatis 存储过程与游标的使用
MyBatis还能对存储过程进行完全支持,这节开始学习存储过程.在讲解之前,我们需要对存储过程有一个基本的认识,首先存储过程是数据库的一个概念,它是数据库预先编译好,放在数据库内存中的一个程序片段,所 ...
- MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...
- mybatis 存储过程调用
接口 UserInfoMapper.java xml UserInfoMapper.xml 如何关联 <?xml version="1.0" encoding=" ...
- mybatis 存储过程的写法
(注意事项: 在使用游标的时候,不能在游标声明之前,使用crud) 存储过程示例 CREATE DEFINER=`root`@`::` PROCEDURE `earnings_proceduce`() ...
- mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
存储过程在小公司用的不多,但是如果业务比较复杂或者性能要求比较苛刻的时候存储过程就派上用场了,ibatis的前期的一些版本貌似不支持存储过程因此我选择了mybatis来做实验. 1.无输入和输出参数的 ...
- MyBatis学习总结(六)——调用存储过程(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- java, mybatis, 调用mysql存储过程
Map<String, Object> bindinfo = new HashMap<String, Object>(); bindinfo.put(&q ...
随机推荐
- 【Repo】推送一个已有的代码到新的 gerrit 服务器
1.指定项目代码库中迭代列出全部ProductList(.git)到pro.log文件中 repo forall -c 'echo $REPO_PROJECT' | tee pro.log 命令解读: ...
- Python杂谈: __init__.py的作用
我们经常在python的模块目录中会看到 "__init__.py" 这个文件,那么它到底有什么作用呢? 1. 标识该目录是一个python的模块包(module package ...
- ADB命令笔记本
ADB即Android Debug Bridge,作为电脑操作手机的工具,被Android开发者和众多国内xxx安全管家所使用.在此记录一些常见的命令,随时更新,方便以后查找.(万一以后我也要开发一款 ...
- Android 动画基础——视图动画(View Animation)
本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...
- 升级d7的代码到2010以上版本注意事项(SetLength的参数就是字符长度,而不是字节长度,但Move函数要改)
delphi2010是delphi所有版本的分水岭,其中2010—xe10.2之间版本上的代码都有比较好的兼容性,基本上都能直接进行编译,不需要过多修改,但d7距d2010跨度4个版本以上,新版本除了 ...
- Morris 轻量级 图表
Morris.js 是基于 jQuery 和 Raphaël 的轻量级矢量图形库,帮助开发人员轻松绘制各种形式的图表.示例: HTML: <div id="myfirstchart&q ...
- Golang环境搭建,Notepad++配置Golang开发环境,Golang发送邮件
http://blog.csdn.net/u011012932/article/details/53102264 http://blog.csdn.net/u011012932/article/det ...
- Spring之Bean的装配
一.Bean的装配Bean的装配,即Bean对象的创建.容器根据代码要求创建Bean对象后再传递给代码的过程,称为Bean的装配.1.默认装配方式代码通过getBean()方式从容器获取指定的Bean ...
- 数组Array
数组Array是最基本的数据结构,在内存中为一段定长连续内存,很多编程语言都有实现. 一.一维数组 下面代码实现了一维数组和它的遍历. clear并非清空数组,而是采用具体值对数组进行初始化. imp ...
- 第一个SpringBoot测试实例
1.SpringBoot项目构建:http://start-spring.io 自动化构建SpringBoot项目,保存在本地并解压 2.安装gradle并配置gradle环境 3.配置阿里云ma ...