热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Mybatis源码分析之存储过程调用和运行流程

这一篇我们学习一下Mybatis调用存储过程的使用和运行流程,首先我们创建一个简单的存储过程,具体创建过程大家可以通过本文学习下

这一篇我们学习一下Mybatis调用存储过程的使用和运行流程。首先我们先创建一个简单的存储过程

DELIMITER $ 
CREATE PROCEDURE mybatis.ges_user_count(IN age INT, OUT user_count INT) 
BEGIN 
SELECT COUNT(*) FROM users WHERE users.age=age INTO user_count; 
END 
$ 

这个存储过程的含义其实比较简单的,就是输入age,然后执行select count(*) from users where users.age = age into user_count;获得年龄等于age的人数赋值给user_count,还是比较简单的。

接下来是存储过程的调用,执行如下命令就可以完成存储过程的调用。

接下来我们看看利用Mybatis是如何调用存储过程的。

userMapper.xml添加存储过程调用配置:

 

Main函数:

public class Learn1Main { 
 public static void main(String [] args){ 
  //mybatis的配置文件 
  String resource = "learn/mybatis-config.xml"; 
  //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) 
  InputStream is = Learn1Main.class.getClassLoader().getResourceAsStream(resource); 
  //构建sqlSession的工厂 
  SqlSessionFactory sessiOnFactory= new SqlSessionFactoryBuilder().build(is); 
  SqlSession session = sessionFactory.openSession(); 
  Map parameterMap = new HashMap(); 
  parameterMap.put("age", 12); 
  parameterMap.put("user_count", -1); 
  session.selectOne("com.tianjunwei.learn.learn1.entity.User.count", parameterMap); 
  Integer result = parameterMap.get("user_count"); 
  System.out.println(result); 
 } 
} 

运行结果:

其最终的执行过程在DefaultResultSetHandler中,调用普通的sql和存储过程之间还是有所区别的,Sql语句的执行是使用CallableStatement。

// 
// HANDLE OUTPUT PARAMETER 
// 
//调用存储过程返回结果,将结果值放在参数中 
@Override 
public void handleOutputParameters(CallableStatement cs) throws SQLException { 
 final Object parameterObject = parameterHandler.getParameterObject(); 
 final MetaObject metaParam = configuration.newMetaObject(parameterObject); 
 final List parameterMappings = boundSql.getParameterMappings(); 
/循环处理每个参数 
 for (int i = 0; i  typeHandler = parameterMapping.getTypeHandler(); 
  metaParam.setValue(parameterMapping.getProperty(), typeHandler.getResult(cs, i + 1)); 
  } 
 } 
 } 
} 
private void handleRefCursorOutputParameter(ResultSet rs, ParameterMapping parameterMapping, MetaObject metaParam) throws SQLException { 
 try { 
 final String resultMapId = parameterMapping.getResultMapId(); 
 final ResultMap resultMap = configuration.getResultMap(resultMapId); 
 final DefaultResultHandler resultHandler = new DefaultResultHandler(objectFactory); 
 final ResultSetWrapper rsw = new ResultSetWrapper(rs, configuration); 
 handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null); 
 metaParam.setValue(parameterMapping.getProperty(), resultHandler.getResultList()); 
 } finally { 
 // issue #228 (close resultsets) 
 closeResultSet(rs); 
 } 
} 

以上所述是小编给大家介绍的Mybatis源码分析之存储过程调用和运行流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • BME框架使用中的典型问题解析
    本文主要探讨了BME框架在实际应用中遇到的一些常见问题,包括查询条件为空、动态参数处理及分页查询等场景的解决方案。 ... [详细]
  • 深入理解Hibernate延迟加载机制
    本文探讨了Hibernate框架中的延迟加载(懒加载)特性,分析其对程序性能的影响及实现原理,同时提供了具体的代码示例来说明如何配置和使用延迟加载。 ... [详细]
  • 本文提供了一组示例表,并探讨了如何通过SQL查询来计算父记录及其子记录的总金额。 ... [详细]
  • 本文探讨了Entity Framework 4(EF4)与SQL Server 2000之间的兼容性问题,并提供了官方反馈链接以供参考。 ... [详细]
  • databasesync适配openGauss使用指导书
    一、database-sync简介database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库该工具支持的功能如 ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • ThinkPHP 文件缓存组件详解与应用
    本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • SonarQube配置与使用指南
    本文档详细介绍了SonarQube的配置方法及使用流程,包括环境准备、样本分析、数据库配置、项目属性文件解析以及插件安装等内容,适用于具有Linux基础操作能力的用户。 ... [详细]
  • 解决PHP与MySQL之间的编码不匹配问题
    探讨如何有效解决PHP与MySQL之间常见的编码问题,确保数据的正确传输与显示。 ... [详细]
  • 使用Docker部署Gitea自托管Git服务
    Gitea是由Gogs社区分叉而来的开源自托管Git服务,旨在提供一个更加灵活和易于维护的解决方案。本文将详细介绍如何利用Docker容器技术快速部署Gitea。 ... [详细]
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • Oracle 数据库提供了自动化文件管理(OFM)的功能,允许用户通过设置特定参数来简化数据文件和日志文件的创建过程。当配置了 db_create_file_dest 和 db_create_online_log_dest_n 参数后,系统能够自动处理文件的创建与删除。 ... [详细]
  • 1、服务器配置信息① 主服务器IP:192.168.1.2② 从服务器IP:192.168.1.3③ 操作系统:主服务器:Win8,从服务器࿱ ... [详细]
author-avatar
_西兰花_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有