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" ?> <! ...
随机推荐
- java 删除多层文件夹
/** * 因为不小心,写了一个死循环,在电脑里创建的了n多层空文件夹 * 并且手动最外层删除不掉. * 所以用写了本代码,从里向外的进行删除操作. * @author Singularity * @ ...
- Windows Server 2012配置iis遇到的问题
发布网站访问时报500 - 内部服务器错误,经排查是Windows Server 2012上的iis配置有问题,有些需要的功能没有配置. 在重新配置iis时总是安装失败,提示存储空间不足. 在网上查找 ...
- 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论
依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖,没有A,B存在错误.语义,句子含义. 依存句法强调介词.助词划分作用,语 ...
- input元素的required属性引发的血案
罪魁祸首===> 1,input 有一个tel类型,为移动端设置的 2,input的radio类型是根据name区分的,与id.class无关 3,<!DOCTYPE html>:文 ...
- XSS学习(三)挖掘思路
HTML标签之间 <div id="body"> [输出点] </div> payload:<script>alert(1)</scrip ...
- 配置GO开发环境
目前准备开发一套服务器的实时监控系统,经过与大佬讨论,决定选择golang作为数据的中间件. 负责接收游戏服务器的打点数据.清洗数据,入库等流程. 在github上选了一个高星的Go框架,https: ...
- Comedi的学习过程
1.介绍Comedi 1.1Comedi是一个设备驱动开发的软件工具,它采用了一种3层组织模型:上层是用户层,Comedi提供了在用户控件编写程序的接口Comedilib,通过系统调用来控制硬件设备: ...
- 【Jest】笔记二:Matchers匹配器
一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...
- node中间件概念
中间件就是请求req和响应res之间的一个应用,请求浏览器向服务器发送一个请求后,服务器直接通过request定位属性的方式得到通过request携带过去的数据,就是用户输入的数据和浏览器本身的数据信 ...
- Iterator迭代器UML类图
ArrayList类中,实现了List接口的方法 List接口的方法 迭代器接口 ArrayList的内部类实现了这个[迭代器]接口