Mybatis框架学习总结-调用存储过程
设计需求
查询数据库,查询得到男性或女性的数量,如果传入的参数是0查询女性,否则查询男性。
准备数据库表和存储过程
1.准备person表:
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
sex CHAR(2)
); INSERT INTO person(NAME,sex) VALUES('A',"m");
INSERT INTO person(NAME,sex) VALUES('B',"f");
INSERT INTO person(NAME,sex) VALUES('C',"m");
查看person表的内容:

创建存储过程:
创建存储过程,查询得到男性或女性的数量,如果传入的是0就是女性,否则就是男性
DELIMITER $
CREATE PROCEDURE mybatis.ges_person_count(IN sex_id INT ,OUT person_count INT)
BEGIN
IF sex_id=0 THEN
SELECT COUNT(*) FROM mybatis.`person` WHERE person.`sex`='f' INTO person_count;
ELSE
SELECT COUNT(*) FROM mybatis.`person` WHERE person.`sex`='m' INTO person_count;
END IF;
END
$

调用存储过程
DELIMITER ;
SET @person_count=0;
CALL mybatis.`ges_person_count`(1,@person_count);
SELECT @person_count;

2.编辑userMapper.xml,你也可以在别的xml中配置,这个随意
<!-- 调用存储过程得到男性或女性的数量,如果传入的是0,就女性,否则是男性 -->
<select id="getPersonCount" parameterMap="getPersonCountMap" statementType="CALLABLE">
CALL mybatis.`ges_person_count`(?,?);
</select> <!-- parameterMap.put("sexid",0)
parameterMap.put("usercount,-1);
-->
<parameterMap type="java.util.Map" id="getPersonCountMap">
<parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
<parameter property="personcount" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>
3.编写单元测试代码:
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
String statement = "com.fpc.Mapping.userMapper.getPersonCount";
SqlSession session = sessionFactory.openSession();
Map<String,Integer> parameterMap = new HashMap<>();
parameterMap.put("sexid", 0);
parameterMap.put("personcount", -1);
session.selectOne(statement,parameterMap);
int count = parameterMap.get("personcount");
String profile = "";
if ( parameterMap.get("sexid") == 0 ) {
profile += "女生的数量为:";
} else {
profile += "男生的树数量为:";
}
System.out.println( profile + count);
执行结果:

Mybatis框架学习总结-调用存储过程的更多相关文章
- MyBatis入门学习教程-调用存储过程
一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 create table p_user( id int primary key auto_incr ...
- MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程
虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...
- 03 Mybatis框架---学习笔记1--框架的概念及优势
1.框架的概念 框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.简单说就是使用别人搭好的舞台,你来做表演.而且,框架一般是成熟的,不断升级的软件.框架是我们软件开发中的一套解决方 ...
- Mybatis框架学习总结-Mybatis框架搭建和使用
Mybatis介绍 Mybatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.Mybatis可以使 ...
- Mybatis框架学习1:入门
一框架介绍 1.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google c ...
- mybatis框架学习:
一.什么是框架 它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能 大大提高开发效率 二.三层框架 表现层: 用 ...
- mybatis框架学习第一天
三层架构: 表现层:用于展示数据 业务层:处理业务需求 持久层:和数据库交互的 3.持久层技术解决方案: JDBC技术: Connecction PreparedStatement ResultSet ...
- Mybatis框架学习总结-表的关联查询
一对一关联 创建表和数据:创建一张教师表和班级表,这里假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIM ...
- Mybatis框架学习总结-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定是完全相同的. 1.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY ...
随机推荐
- js监听文本框变化事件
用js有两种写法: 法一: <!DOCTYPE HTMl> <html> <head> <title> new document </title& ...
- centos7系统根目录扩容
比如 点击了后 点击创建虚拟磁盘 选择一个 20G 然后启动虚拟机使用fdisk查看所有的磁盘 看是否新增了一个20G的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev ...
- 07 Test结构
Test 有多种实现方式, [ 等价于 test, 并且 [ 是一个内建命令, 效率很高 另外, [[]] 也是测试, [[]]结构比bash[]更灵活, 这是一个扩展test命令, 从ksh88继承 ...
- 【转】【Linux】sed命令详解
sed命令详解 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令 ...
- MyBatis是支持普通 SQL查询
MyBatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配置 ...
- (转)FS_S5PC100平台上Linux Camera驱动开发详解(一) .
平台linuxstructlinux内核videocam 说明: 理解摄像头驱动需要四个前提: 1)摄像头基本的工作原理和S5PC100集成的Camera控制器的工作原理 ...
- backbone.js初探(转)
BackBone是JavaScript frameworks for creating MVC-like web applications,最近流行的用来建立单页面web application的工具 ...
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...
- Spark源代码阅读笔记之MetadataCleaner
MetadataCleaner执行定时任务周期性的清理元数据(metadata),有6种类型的元数据:MAP_OUTPUT_TRACKER.executor跟踪各个map任务输出的存储位置的数据,依据 ...
- C语言关系运算符
在上节<C语言if else语句>中看到,if 的判断条件中使用了<=.>.!=等符号,它们专门用在判断条件中,让程序决定下一步的操作,称为关系运算符(Relational O ...