文档章节

MyBatis学习总结——调用存储过程

gulf
 gulf
发布于 2016/07/13 13:59
字数 496
阅读 15
收藏 0

 

MyBatis学习总结(——调用存储过程

一、提出需求

  查询得到男性或女性的数量, 如果传入的是0就女性否则是男性

二、准备数据库表和存储过程

 

1 create table p_user(  
 2     id int primary key auto_increment,  
 3     name varchar(10),
 4     sex char(2)
 5 ); 
 6 
 7 insert into p_user(name,sex) values('A',"男");  
 8 insert into p_user(name,sex) values('B',"女");  
 9 insert into p_user(name,sex) values('C',"男");  
10 
11 -- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)
12 DELIMITER $
13 CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT)
14 BEGIN  
15 IF sex_id=0 THEN
16 SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;
17 ELSE
18 SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count;
19 END IF;
20 END 
21 $
22 
23 -- 调用存储过程
24 DELIMITER ;
25 SET @user_count = 0;
26 CALL mybatis.ges_user_count(1, @user_count);
27 SELECT @user_count;

 

三、编辑userMapper.xml

  编辑userMapper.xml文件,添加如下的配置项

 

1 <!-- 
 2         查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
 3      -->
 4     <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
 5         CALL mybatis.ges_user_count(?,?)
 6     </select>
 7     
 8     <!--
 9         parameterMap.put("sexid", 0);
10         parameterMap.put("usercount", -1);
11      -->
12     <parameterMap type="java.util.Map" id="getUserCountMap">
13         <parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
14         <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
15     </parameterMap>

 

四、编写单元测试代码

 

1 package me.gacl.test;
 2 
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import me.gacl.custom.model.ConditionUser;
 8 import me.gacl.domain.User;
 9 import me.gacl.util.MyBatisUtil;
10 import org.apache.ibatis.session.SqlSession;
11 import org.junit.Test;
12 
13 /**
14  * @author gacl
15  * 测试调用存储过程
16  */
17 public class Test6 {
18     
19     @Test
20     public void testGetUserCount(){
21         SqlSession sqlSession = MyBatisUtil.getSqlSession();
22         /**
23          * 映射sql的标识字符串,
24          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
25          * getUserCount是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
26          */
27         String statement = "me.gacl.mapping.userMapper.getUserCount";//映射sql的标识字符串
28         Map<String, Integer> parameterMap = new HashMap<String, Integer>();
29         parameterMap.put("sexid", 1);
30         parameterMap.put("usercount", -1);
31         sqlSession.selectOne(statement, parameterMap);
32         Integer result = parameterMap.get("usercount");
33         System.out.println(result);
34         sqlSession.close();
35     }
36 }

 

© 著作权归作者所有

共有 人打赏支持
gulf
粉丝 13
博文 277
码字总数 156947
作品 0
广州
程序员
私信 提问
Java专家之路(二)---数据访问和数据持久化框架的总结

Java数据访问和持久化(SQL) 方案一:JDBC 什么是JDBC? Java语言访问数据库的一种规范,是一套API。JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的...

u011500356
2017/12/20
0
0
早前学习Java记录

Spring 对 iBATIS 的支持】 Spring 通过 DAO 模式,提供了对 iBATIS 的良好支持。 SqlMapClient:是 iBATIS 中的主要接口,通过 xml 配置文件可以让 Spring 容器来管理 SqlMapClient 对象的创...

大风厂蔡成功
2016/07/10
43
0
回顾一下MyBatis逆向工程——自动生成代码

⭐⭐⭐⭐⭐最最最最最重要的事情: 我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide 我...

snailclimb
07/12
0
0
ORM知多少

公司的项目中都涉及到ORM(Object Relational Mapping)框架,EF映射、Hibernate、Mybatis、JPA……不断涌现的新鲜词语,面试的时候面试官还在说EFframework(有木有很奇怪),那就来一探究竟吧...

zt15732625878
2017/10/12
0
0
防止sql注入的三种方法

常用的避免SQL注入的三种方法 一,存储过程 在学习数据库视频的时候接触过,它是存储在数据库中的一些事先编译好的指令。在用的时候不用重新编写,直接调用就好了。所以,使用它可以大大提高...

安安-Anan
2015/09/01
270
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
153
4
Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
14
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
21
0

中国龙-扬科
昨天
4
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部