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 ...
随机推荐
- 微信小程序把玩(四十一)canvas API
原文:微信小程序把玩(四十一)canvas API 绘图是每个移动应用必备的技术,基本上和Android,IOS,等移动开发都是相同的,创建个上下文,给你个画布再上画,官网给的小例子都比较全了自己去看 ...
- Java 线程池(一):开篇及Executor整体框架介绍
一.开篇 线程池.数据库连接池,在平时的学习中总能接触到这两个词,但它们到底是什么?和线程,数据库连接有什么关系?为什么需要“池”?“池”的概念及作用是什么?要弄清楚这些问题,就要深入到“池”的实现中 ...
- 高性能JSON解析器及生成器RapidJSON
RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成器,同时支持SAX/DOM风格的API. 直击现场 RapidJSON是腾讯公司开源的一个C++的高性能的JSON解析器及生成 ...
- Windows Python虚拟环境配置(Distribute + pip + virtualenv + virtualenvwrapper-powershell)
对于Python开发新手,很多人会迷茫那些各种名目的工具和概念,如Python2.7, Python3.3, Distribute, pip, virtualenv,Setuptools, easy_ ...
- iOS密码框的实现方式
说一下密码加密的实现方式 效果图: 实现方式: 主要说一下密码框的实现,这个密码框中间的四个数字其实是4个 UITextField ,然后通过键盘删除键 和TextFile ...
- 原创powershell脚本:通过远程桌面3389黑名单,阻止黑客ip
远程桌面 3389 ban ip 防火墙 rdp 通过远程桌面3389黑名单,阻止黑客ip.这是一个常见的需求.但我搜遍了谷歌也找不到成品脚本.想做搬运工却做不成,只能自己费尽写.下载备用吧,估计 ...
- 在windows下的QT编程中的char*,wchar_t*与QString之间的转换(利用reinterpret_cast和_stprintf函数,fromWCharArray从字符数组里读取数据)
http://blog.csdn.net/yangxiao_0203/article/details/7422660 转自http://hi.baidu.com/zj41342626/blog/ite ...
- 解释一下,知乎上关于C语言奇技淫巧最火的回答。
前几天逛知乎,碰巧发现一个很火的问题. “C 语言有什么奇技淫巧?”虽然问题本身没有什么特殊的地方,但是网友的回答却是非常幽默. 下面就让我们一起来分析一下,被赞最多的答案“C 语言运算符 趋向于‘- ...
- python中的set集合和深浅拷贝
一.基础数据类型的补充 1.str中的join算法,将列表转换成字符串,并用'_'(或其他) li=['李嘉诚','马化腾','刘嘉玲','黄海峰',] s='_'.join(li) print(s) ...
- 【转】子弹短信内部技术分享:Redis
原理 Redis 是一个内存型「数据库」,除存储之外,它还有许多强大的命令,使之远远超出了数据库的定义,所以官方称之为「data structure store」,数据结构存储系统. 通过 Redis ...