mybatis入门篇:存储过程的操作
1、无ResultType/ResultMap查询
先定义一个查询的存储过程:
DELIMITER // CREATE PROCEDURE `select_user_by_id`( IN userId BIGINT, OUT userName VARCHAR(), OUT headImg BLOB, OUT createTime DATETIME ) BEGIN SELECT user_name, head_img, create_time INTO userName, headImg, createTime FROM user WHERE id=userId; END // DELIMITER ;
编写mapper接口和xml:
public interface UserMapper { void selectUsersById(User user); }
注:存储过程不支持缓存,为了避免缓存配置出错,此处加上useCache=“false”。另外,OUT的参数需要悉数加上jdbcType,因为IN模式下,mybatis指定了jdbcType,同时,对于BLOB格式的参数,需要加上javaType,在mybatis映射的java类中,不建议使用基本类型。blob通常用byte[]表示,故携程_byte[]。(_byte对应byte类型;byte对应Byte类型。)
<select id="selectUsersById" statementType="CALLABLE" useCache="false"> {call select_user_by_id( #{id, mode=IN}, #{userName, mode=OUT, jdbcType=VARCHAR}, #{headImg, mode=OUT, jdbcType=BLOB, javaType=_byte[]}, #{createTime, mode=OUT, jdbcType=TIMESTAMP} )} </select>
调用测试:
@Test public void UserMapperTest(){ SqlSession sqlSession = getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setId(2L); System.out.println(user.getUserName()); System.out.println(user.getHeadImg()); System.out.println(user.getCreateTime()); userMapper.selectUsersById(user); System.out.println("----------------------------------"); System.out.println(user.getUserName()); System.out.println(user.getHeadImg()); System.out.println(user.getCreateTime()); }
调试结果:
2、含ResultType/ResultMap查询
编写存储过程
DELIMITER $$ CREATE PROCEDURE `select _user_page`(IN _offset BIGINT, IN _limit BIGINT, OUT total BIGINT) BEGIN #查询数据总数 SELECT COUNT(*) INTO total FROM user; #分页查询数据 SELECT * FROM user LIMIT _offset, _limit; END $$ DELIMITER $$
编写mapper接口和xml
public interface UserMapper { List<User> selectUsersPage(Map<String,Integer> map); }
<select id="selectUsersPage" statementType="CALLABLE" useCache="false" resultType="com.forest.owl.entity.User"> {call select_user_page( #{offset, mode=IN}, #{limit, mode=IN}, #{totalCount, mode=OUT, jdbcType=BIGINT, javaType=Integer} )} </select>
@Test public void UserMapperTest(){ SqlSession sqlSession = getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Integer> map = new HashMap<String, Integer>(); map.put(); map.put(); List<User> userList = userMapper.selectUsersPage(map); System.out.println(userList.size()); System.out.println(map.get("totalCount")); }
mybatis入门篇:存储过程的操作的更多相关文章
- Mybatis入门篇之结果映射,你射准了吗?
目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...
- MyBatis入门篇
一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
- Mybatis入门篇之基础CRUD
前言 作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个封装性极强的持久性框架.自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻 ...
- mybatis入门篇基——基本配置与参数说明
Mybatis 好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点.今天想谈谈关于mybatis的一些基础入门知识. 进入正题~~: a.关于mybatis: 我个人觉得mybatis深得 ...
- mybatis入门篇:代码生成器(MyBatis Generator)
这篇文章只是按照自己的需要去配置代码生成器,未对所有配置进行讲解,需要了解具体详情的,请到官网查阅文档.传送门:http://www.mybatis.org/generator/ 1.首先引入相关的依 ...
- 《Java从入门到放弃》JavaSE入门篇:文件操作
Java中的文件操作还有点小复杂··· 不过没关系,我会把它讲得很简单,嘿嘿嘿!!! 在讲Java中的文件操作前,先了解一个概念--"流",比如我们把一个杯子的水倒到另一个同样大小 ...
- mybatis入门篇:通过SqlSession.selectList进行数据查询
作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...
- mybatis入门篇:Mybatis高级查询
1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...
- mybatis入门篇:Mybatis注解方式的基本用法
@Select 1.mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <! ...
随机推荐
- Vue.js devtool插件安装后无法使用的解决办法【最简单有效的解决方法】
在开发vue相关的项目时,使用vue devtools工具是一件极其有趣的事,你所有的操作都马上给你实时反馈. 然而有时候安装好的工具,在chrome中不显示. 在网上找过多次,一直没有找到有效解决方 ...
- UVa439——骑士的移动
简单bfs #include <iostream> #include <cstring> #include <string> #include <map> ...
- Python入门 (一)
本文是个人python学习笔记,学习资料为廖雪峰python教程,如需更多内容,请移步廖老师官方网站. 一 安装 官网下载安装包安装,安装好之后,在命令提示符输入python进入Python交互模式: ...
- vue 通知 走马灯效果
封装一个子组件: <template> <div class="container"> <div class="wrap"> ...
- Android DrawerLayout侧滑菜单
本教程已经录制视频,欢迎大家观看我在CSDN学院录制的课程:http://edu.csdn.net/lecturer/944
- the status bar issue of react-native Modal on Android ( RN v0.57.0)
Problem: When use Modal in react-native, the status bar is not included if you make a full-screen ma ...
- Far manager界面混乱问题解决
刚装完,win7和XP上运行,都是界面混乱,看到网上说是属性里改字体,改编码,我试了半天不行: 最后发现,需要far.exe创建快捷方式,在快捷方式的属性里设置字体,编码,窗口大小,废话不多说,上图: ...
- CSS 中的 !important 属性
!important的作用就是提高指定样式属性的优先级. 一般情况下,我们对同一个元素设置样式属性的时候,对同一个属性设置了两个甚至多个值,像下面这样: p { /* 例1 */ color:red; ...
- GanttProject 如何显示今天和项目结束
GanttProject 如何显示今天和项目结束 GanttProject 在甘特图中可以很直观的看出项目开始和结束. 同时也可以看到今天的. 把今天的时间线打开,默认是关闭.
- 蓝桥杯省赛 牌型种数java
小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺 ...