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. s21day13 python笔记

    s21day13 python笔记 一.装饰器 目的:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能 应用场景:想要为函数扩展功能时,可以选择用装饰器 装饰器基本格式: def ...

  2. Ubuntu19.04配置SS+pac非全局代理

    1.先安装shadowsocks-qt5 sudo apt install shadowsocks-qt5 2.因为ss是sock5代理,而shell不支持socks5代理,只支持http/https ...

  3. 解决eclipse使用tomcat启动项目后访问项目404的问题

    今天启动项目的时候发现项目启动没有问题,但是一直访问不到页面,F12发现根本没有交互,百度后解决了,故记下来为以后提供方法,若有不同的解决方法,欢迎指教 1.首先要确保你的tomcat下没有项目,怎么 ...

  4. Spring Boot Logback日志配置

    logback的使用: Logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurat ...

  5. liunx学习笔记

    告知-----------------------------------grub启动时滚动的代码屏默认我们执行命令使用的为bash,unix使用的为csh能够通过service 程序名进行start ...

  6. jQuery基础之一

    jQuery基础之一   初识jQuery jQuery封装JavaScript中多个好用的函数成为并形成代码库,操作时也更符合我们的习惯,并且减少了浏览器之间的兼容性. jQuery官网 引入 本地 ...

  7. Nopcommerce安装,应用及二次开发视频

    CSDN课程:http://edu.csdn.net/lecturer/944

  8. 使用Websocket与服务器建立连接

    handleMessage = () => { const url = '////'; //某url const token = getCookie('xnToken');//向后端发请求得登陆 ...

  9. python smtp邮件

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  10. creator rotationY的问题

    最近在做一个2D的小游戏,碰撞方面由于懒,就直接使用cocos自带的物理组件RigidBody了. 但是在父节点挂载RigidBody之后,会导致设置rotationY时失效,具体原因没有深查,估计是 ...