Mybatis学习笔记(四)调用存储过程
时间:2022-07-23
本文章向大家介绍Mybatis学习笔记(四)调用存储过程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
存储过程有如下几个优点 1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
2.允许模块化程序设计 – 类似方法的复用
3.提高系统安全性 – 防止SQL注入
4.减少网络流通量 – 只要传输存储过程的名称 所以想要追求速度,可以使用存储过程。 先简单回顾一下存储过程的使用: 首先是创建存储过程procedure:
create procedure 存储过程name
(输入输出类型 变量名1 变量类型
。。。。。。
)
as
sql语句
举个例子
create procedure selectname (in id integer,out name vachar(20)
as
select name from user where id=id;
之后就是调用存储过程 分两种一种是调用默认参数的
exec procedure selectname;
另一种是自己给变量赋值的
exec procedure selectname 20;
接下来在mybatis中实际运用 首先创建一个新的表p_user
create table p_user(
id int primary key auto_increment,
name varchar(10),
sex char(2)
);
insert into p_user(name,sex) values('A',"男");
insert into p_user(name,sex) values('B',"女");
insert into p_user(name,sex) values('C',"男");
创建存储过程:
-- 创建存储过程(查询得到男性或女性的数量, 如果传入的是0就女性否则是男性)
DELIMITER $
CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT)
BEGIN
IF sex_id=0 THEN
SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='女' INTO user_count;
ELSE
SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='男' INTO user_count;
END IF;
END
$
-- 调用存储过程
DELIMITER ;
SET @user_count = 0;
CALL mybatis.ges_user_count(1, @user_count);
SELECT @user_count;
之后还是在之前的userMapper中重新创建并调用存储过程的select标签
<select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
call mybatis.ges_user_count(?,?)
</select>
<parameterMap type="java.util.Map" id="getUserCountMap">
<parameter property="sexid" mode="IN" jdbcType="INTEGER"/>
<parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>
这里我们可以看到之前我们碰到的都是parameter,这次的就是parameterMap,因为输入的数据不是单个的,所以我们采用Map来实现。 接下来定义Map中的各元素 之后便是测试类:
public class Test6 {
public static void testGetUserCount()
{
SqlSession sqlSession=MyBatisUtil.getSqlSession();
String statement="me.gacl.mapping.userMapper.getUserCount";
Map<String, Integer>parameterMap=new HashMap<String, Integer>();
parameterMap.put("sexid", 1);
parameterMap.put("usercount", 0);
sqlSession.selectOne(statement, parameterMap);
Integer result=parameterMap.get("usercount");
System.out.println(result);
sqlSession.close();
}
public static void main(String[] args) {
testGetUserCount();
}
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python-matplotlib 空间栅格数据可视化
- 图解面试题:如何找到喜欢的电影?
- Java agent 与 byte buddy
- 关于TRTC云端混流的踩坑分享
- 聊聊dubbo-go的ConsistentHashLoadBalance
- R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型
- R语言使用随机技术差分进化算法优化的Nelson
- R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
- R语言和QuantLib中Nelson-Siegel模型收益曲线建模分析
- 用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
- R语言LME4混合效应模型研究教师的受欢迎程度
- R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
- R语言中的风险价值模型度量指标TVaR与VaR
- R语言用线性回归模型预测空气质量臭氧数据
- R语言线性模型臭氧预测: 加权泊松回归,普通最小二乘,加权负二项式模型