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入门篇:存储过程的操作的更多相关文章

  1. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...

  2. MyBatis入门篇

    一.什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  3. Mybatis入门篇之基础CRUD

    前言 作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个封装性极强的持久性框架.自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻 ...

  4. mybatis入门篇基——基本配置与参数说明

    Mybatis 好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点.今天想谈谈关于mybatis的一些基础入门知识. 进入正题~~: a.关于mybatis: 我个人觉得mybatis深得 ...

  5. mybatis入门篇:代码生成器(MyBatis Generator)

    这篇文章只是按照自己的需要去配置代码生成器,未对所有配置进行讲解,需要了解具体详情的,请到官网查阅文档.传送门:http://www.mybatis.org/generator/ 1.首先引入相关的依 ...

  6. 《Java从入门到放弃》JavaSE入门篇:文件操作

    Java中的文件操作还有点小复杂··· 不过没关系,我会把它讲得很简单,嘿嘿嘿!!! 在讲Java中的文件操作前,先了解一个概念--"流",比如我们把一个杯子的水倒到另一个同样大小 ...

  7. mybatis入门篇:通过SqlSession.selectList进行数据查询

    作为一个java菜鸟,早就从慕课网中学到一些基本的mybatis的用法,但是一直不成体系,懵懵懂懂,既然正式入了java这个坑,就打算好好学学,所以买了本<MyBatis从入门到精通>,在 ...

  8. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  9. mybatis入门篇:Mybatis注解方式的基本用法

    @Select 1.mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <! ...

随机推荐

  1. ImageUtil

    package com.rscode.credits.util; import java.io.File; import java.io.IOException; import java.util.A ...

  2. UVa 712

    这个题根本不用建树,因为是完全二叉树,可以把这个想成二进制.对于根是二进制数的首位,之后依次类推.到最后的叶子节点就是从0到pow(2,n)-1. 关键在于在第一次输入的不是按照x1,x2,x3,x4 ...

  3. centos安装mycat

    1.参考前文安装jdk 2.官网 http://www.mycat.io/ 或 http://dl.mycat.io/ 下载mycat 3.解压安装 cd /usr/local cp /home/ta ...

  4. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  5. parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案

    在物理机的环境下安装系统出现点问题,弄了好一会才弄出解决方法 1.parrot和kali安装的时候出现了无efi分区不能继续的问题,要知道我之前安装的时候一直都是\ ; 内存; \home三个分区搞定 ...

  6. creator Box2d的相关物理问题

      项目的屏幕配置为 1152*640,没有对这个数值调整来测试质量的除数1024会不会变化 m = h * w / 1024 (m 质量,h 物体高度,w 物体宽度) g = 0, -320 ( ( ...

  7. table动态增加删除

    基于网上代码修改实现动态添加表数据行 <!DOCTYPE html> <html lang="cn"> <html> <head> ...

  8. Mysql基本代码操作

    Mysql的基本代码生成操作 创建一个数据库   (myschool是数据库名) create database myschool; 删除数据库 drop database myschool 创建一个 ...

  9. Linux df -h空间显示不正确

    今天发现一个测试数据库磁盘空间快满了,准备将几个不再用的表空间删除.通过以下命令删除表空间内容及数据文件. drop tablespace tablespace_name including cont ...

  10. Collections.sort排序

    默认是升序,即Collections.sort(list),对list进行升序排列,如果想降序则需要通过compare这些参数来实现了