mybatis调用mysql存储过程_秒会mybatis调用存储过程(MySQL)
一、简介
有的时候,我们不方便自己写SQL,而是只能调用别人提供的存储过程,那如何使用mybatis调用存储过程呢?
二、示例步骤(MySQL)
2.1 准备一张表
DROP TABLE IF EXISTS cus_device;
CREATE TABLE cus_device (
device_sn varchar(20) NOT NULL COMMENT '设备编号',
device_cat_id int(1) DEFAULT NULL COMMENT '设备类型',
device_name varchar(64) DEFAULT NULL COMMENT '设备名称',
device_type varchar(64) DEFAULT NULL COMMENT '设备型号',
PRIMARY KEY (device_sn)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
DROPTABLEIFEXISTScus_device;
CREATETABLEcus_device(
device_snvarchar(20)NOTNULLCOMMENT'设备编号',
device_cat_idint(1)DEFAULTNULLCOMMENT'设备类型',
device_namevarchar(64)DEFAULTNULLCOMMENT'设备名称',
device_typevarchar(64)DEFAULTNULLCOMMENT'设备型号',
PRIMARYKEY(device_sn)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
2.2 准备一个存储过程
以设备的名称为输入参数,以统计到设备的总数为输出参数
DROP PROCEDURE IF EXISTS countDevicesName;
DELIMITER ;;
CREATE PROCEDURE countDevicesName(IN dName VARCHAR(12),OUT deviceCount INT)
BEGIN
SELECT COUNT(*) INTO deviceCount FROM cus_device WHERE device_name = dName;
END
;;
DELIMITER ;
1
2
3
4
5
6
7
8
9
DROPPROCEDUREIFEXISTScountDevicesName;
DELIMITER;;
CREATEPROCEDUREcountDevicesName(INdNameVARCHAR(12),OUTdeviceCountINT)
BEGIN
SELECTCOUNT(*)INTOdeviceCountFROMcus_deviceWHEREdevice_name=dName;
END
;;
DELIMITER;
2.3 mybatis-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2.4 CusDevice.java
public class DevicePOJO{
private String devoceName;//设备名称
private String deviceCount;//设备总数
public String getDevoceName() {
return devoceName;
}
public void setDevoceName(String devoceName) {
this.devoceName = devoceName;
}
public String getDeviceCount() {
return deviceCount;
}
public void setDeviceCount(String deviceCount) {
this.deviceCount = deviceCount;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
publicclassDevicePOJO{
privateStringdevoceName;//设备名称
privateStringdeviceCount;//设备总数
publicStringgetDevoceName(){
returndevoceName;
}
publicvoidsetDevoceName(StringdevoceName){
this.devoceName=devoceName;
}
publicStringgetDeviceCount(){
returndeviceCount;
}
publicvoidsetDeviceCount(StringdeviceCount){
this.deviceCount=deviceCount;
}
}
2.5 DeviceDAO的实现
package com.producedemo;
public interface DeviceDAO {
/**
* 调用存储过程 获取设备的总数
* @param devicePOJO
*/
public void count(DevicePOJO devicePOJO);
}
1
2
3
4
5
6
7
8
9
10
11
packagecom.producedemo;
publicinterfaceDeviceDAO{
/**
* 调用存储过程 获取设备的总数
* @param devicePOJO
*/
publicvoidcount(DevicePOJOdevicePOJO);
}
2.6 Mapper的实现
device_sn, device_name,device_mac
statementType="CALLABLE">
call countDevicesName(
#{devoceName,mode=IN,jdbcType=VARCHAR},
#{deviceCount,mode=OUT,jdbcType=INTEGER});
]]>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
device_sn,device_name,device_mac
statementType="CALLABLE">
callcountDevicesName(
#{devoceName,mode=IN,jdbcType=VARCHAR},
#{deviceCount,mode=OUT,jdbcType=INTEGER});
]]>
注意:statementType=”CALLABLE” 必须为CALLABLE,告诉MyBatis去执行存储过程, 否则会报错
Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException
mode=IN 输入参数 mode=OUT输出参数 jdbcType为数据库定义的字段类型。
这样写 Mybatis会帮助我们自动回填输出的deviceCount的值。
2.7 测试
package com.producedemo;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* MyBatis 执行存储过程
* @author Administrator
*
*/
public class TestProduce {
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
private static SqlSessionFactory sqlSessionFactory;
private static void init() throws IOException {
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);
}
public static void main(String[] args) throws Exception {
testCallProduce();
}
/**
* @throws IOException
*/
private static void testCallProduce() throws IOException {
init();
SqlSession session= sqlSessionFactory.openSession();
DeviceDAO deviceDAO = session.getMapper(DeviceDAO.class);
DevicePOJO device = new DevicePOJO();
device.setDevoceName("设备名称");
deviceDAO.count(device);
System.out.println("获取"+device.getDevoceName()+"设备的总数="+device.getDeviceCount());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
packagecom.producedemo;
importjava.io.IOException;
importjava.io.Reader;
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* MyBatis 执行存储过程
* @author Administrator
*
*/
publicclassTestProduce{
privatestaticSqlSessionFactoryBuildersqlSessionFactoryBuilder;
privatestaticSqlSessionFactorysqlSessionFactory;
privatestaticvoidinit()throwsIOException{
Stringresource="mybatis-config.xml";
Readerreader=Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder=newSqlSessionFactoryBuilder();
sqlSessionFactory=sqlSessionFactoryBuilder.build(reader);
}
publicstaticvoidmain(String[]args)throwsException{
testCallProduce();
}
/**
* @throws IOException
*/
privatestaticvoidtestCallProduce()throwsIOException{
init();
SqlSessionsession=sqlSessionFactory.openSession();
DeviceDAOdeviceDAO=session.getMapper(DeviceDAO.class);
DevicePOJOdevice=newDevicePOJO();
device.setDevoceName("设备名称");
deviceDAO.count(device);
System.out.println("获取"+device.getDevoceName()+"设备的总数="+device.getDeviceCount());
}
}
三、结果
可以看到mybatis调用存储过程测试成功了。
浏览量:
994
0
mybatis调用mysql存储过程_秒会mybatis调用存储过程(MySQL)相关推荐
- mybatis生成mysql代码_如何让 Mybatis 自动生成代码,提高开发效率
Actually being alone is not lonely.The real loneliness is when you miss someone. 其实一个人并不孤单,想念一个人的时候才 ...
- 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持
设计数据库架构 VoltDB是关系数据库产品.关系数据库由具有约束,索引和视图的表和列组成.VoltDB使用标准SQL数据库定义语言(DDL)语句来指定数据库架构.因此,为VoltDB数据库设计架构使 ...
- tomcat ng mysql 集成_整合nginx,tomcat,mysql的安装与配置
linux下Nginx+tomcat+mysql整合的安装与配置维护 安装Tomcat和JDK上传apache-tomcat-6.0.18.tar.gz和jdk-6u12-linux-i586.bin ...
- gearman mysql编译_利用gearman实现redis缓存mysql
环境: centos6.5 mysql5.6 gearman简介: Gearman是一个支持分布式的任务分发框架.设计简洁,获得了非常广泛的支持.一个典型的Gearman应用包括以下这些部分: Gea ...
- 刘道成mysql视频教程_燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载
课程名称 燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载 课程介绍 本教程完全从初学者的角度出发,循序渐进,逐步深入,确保每一位初学者能够理解和掌握,进而达到精通的程度,本套教程非常 ...
- db2 删除存储过程_数据库教程-SQL Server存储过程使用及异常处理
SQL Server存储过程 存储过程(Procedure)是数据库重要对象之一,也是数据库学习的重点之一.本文,我们以SQL Server为例对存储过程的概念.定义.调用.删除及存储过程调用异常等通 ...
- 哪里有mysql认证_国内哪个城市可以考mysql认证
学习完成该课程,你将能够: - 设计优化策略 - 具备有关MySQL架构的知识 - 获得使用诊断工具的知识和能力 - 获得使用优化工具的知识和能力 - 使用INFORMATION_SCHEMA数据库编 ...
- c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改
分页方式不同,oracle使用rownum,mysql使用limit 使用hibernate的QBC不用修改,但hql和sql都应该用统一方法修改 mysql子查询必须带别名 select * fro ...
- brew mysql 配置文件_修改用brew安装的mysql配置
用brew安装mysql brew install mysql 开机启动 ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents lau ...
最新文章
- 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制
- 系统调用的实现(与errno的设置)
- 牛客网(剑指offer) 第二十一题 栈的压入、弹出序列
- DataFrame挑选其中两列,带列名
- CentOS 6快捷安装RabbitMQ教程
- spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient 1
- 软件测试——检查代码
- 拓端tecdat|在R语言中显示美丽的数据摘要summary统计信息
- java编写万年历的报告,用java编写的万年历代码
- 头歌平台-人工智能之AlphaBeta剪枝算法
- 新书推荐 |《深入浅出Serverless:技术原理与应用实践》
- python自动获取北京时间_python将当前服务器的时区时间转为北京时间
- OLED显示与LCD相比的优缺点都有哪些
- 银行软件测试工作总结
- 操作系统——(11)多媒体操作系统
- 7、中置、一元、赋值、结合、apply和update、unapply提取器
- LabVIEW编程LabVIEW控制KELLER压力传感器例程与相关资料
- 大连软交会开幕 人工智能成热点话题
- java 电力 监测 系统,基于Spring框架的电力负荷管理系统[Java编程]
- 智慧职教,云课堂app