一、简介

有的时候,我们不方便自己写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)相关推荐

  1. mybatis生成mysql代码_如何让 Mybatis 自动生成代码,提高开发效率

    Actually being alone is not lonely.The real loneliness is when you miss someone. 其实一个人并不孤单,想念一个人的时候才 ...

  2. 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持

    设计数据库架构 VoltDB是关系数据库产品.关系数据库由具有约束,索引和视图的表和列组成.VoltDB使用标准SQL数据库定义语言(DDL)语句来指定数据库架构.因此,为VoltDB数据库设计架构使 ...

  3. tomcat ng mysql 集成_整合nginx,tomcat,mysql的安装与配置

    linux下Nginx+tomcat+mysql整合的安装与配置维护 安装Tomcat和JDK上传apache-tomcat-6.0.18.tar.gz和jdk-6u12-linux-i586.bin ...

  4. gearman mysql编译_利用gearman实现redis缓存mysql

    环境: centos6.5 mysql5.6 gearman简介: Gearman是一个支持分布式的任务分发框架.设计简洁,获得了非常广泛的支持.一个典型的Gearman应用包括以下这些部分: Gea ...

  5. 刘道成mysql视频教程_燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载

    课程名称 燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载 课程介绍 本教程完全从初学者的角度出发,循序渐进,逐步深入,确保每一位初学者能够理解和掌握,进而达到精通的程度,本套教程非常 ...

  6. db2 删除存储过程_数据库教程-SQL Server存储过程使用及异常处理

    SQL Server存储过程 存储过程(Procedure)是数据库重要对象之一,也是数据库学习的重点之一.本文,我们以SQL Server为例对存储过程的概念.定义.调用.删除及存储过程调用异常等通 ...

  7. 哪里有mysql认证_国内哪个城市可以考mysql认证

    学习完成该课程,你将能够: - 设计优化策略 - 具备有关MySQL架构的知识 - 获得使用诊断工具的知识和能力 - 获得使用优化工具的知识和能力 - 使用INFORMATION_SCHEMA数据库编 ...

  8. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改

    分页方式不同,oracle使用rownum,mysql使用limit 使用hibernate的QBC不用修改,但hql和sql都应该用统一方法修改 mysql子查询必须带别名 select * fro ...

  9. brew mysql 配置文件_修改用brew安装的mysql配置

    用brew安装mysql brew install mysql 开机启动 ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents lau ...

最新文章

  1. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制
  2. 系统调用的实现(与errno的设置)
  3. 牛客网(剑指offer) 第二十一题 栈的压入、弹出序列
  4. DataFrame挑选其中两列,带列名
  5. CentOS 6快捷安装RabbitMQ教程
  6. spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient 1
  7. 软件测试——检查代码
  8. 拓端tecdat|在R语言中显示美丽的数据摘要summary统计信息
  9. java编写万年历的报告,用java编写的万年历代码
  10. 头歌平台-人工智能之AlphaBeta剪枝算法
  11. 新书推荐 |《深入浅出Serverless:技术原理与应用实践》
  12. python自动获取北京时间_python将当前服务器的时区时间转为北京时间
  13. OLED显示与LCD相比的优缺点都有哪些
  14. 银行软件测试工作总结
  15. 操作系统——(11)多媒体操作系统
  16. 7、中置、一元、赋值、结合、apply和update、unapply提取器
  17. LabVIEW编程LabVIEW控制KELLER压力传感器例程与相关资料
  18. 大连软交会开幕 人工智能成热点话题
  19. java 电力 监测 系统,基于Spring框架的电力负荷管理系统[Java编程]
  20. 智慧职教,云课堂app

热门文章

  1. Kylin 2.0 Spark Cubing 优化改进
  2. Linux下一块网卡设置多个IP地址
  3. 喝酒的规矩(是男人必看必顶,女人可不看直接顶)
  4. Go 单元测试从 0 到 1
  5. data-packed volume container - 每天5分钟玩转 Docker 容器技术(43)
  6. 我和ASP.NET MVC有个约会
  7. Android 通知栏用法例子
  8. Router_Cloud
  9. 在MyEclipse中如何查看Spring/Hibernate/Struts/JDK等源码的方法
  10. silverlight实现图片局部放大效果