Java Spring 框架下利用 MyBatis 实现请求 MySQL 数据库的存储过程

请添加图片描述

Java Spring 框架下利用 MyBatis 实现请求 MySQL 数据库的存储过程

    • 环境准备与前置知识
    • 1. 创建 MySQL 存储过程
    • 2. 配置数据源
    • 3. 创建实体类
    • 4. 创建 Mapper 接口
    • 5. 创建 Mapper XML 文件
    • 6. 创建 Service 接口及Impl实现类
    • 7. 创建 Controller 类
    • 8. 测试与总结

在现代的 Web 应用开发中,我们经常需要与数据库交互。Java Spring 框架搭配 MyBatis 可以方便地实现对 MySQL 数据库的操作,特别是调用存储过程。本文将深入探讨如何在 Spring + MyBatis 的环境中调用 MySQL 存储过程并获取查询结果。


环境准备与前置知识

在开始之前,确保已经安装了 Java、Maven、MySQL,并且有一个基本的 Spring Boot 项目。此外,还需要了解以下知识点:

  • Spring Framework:依赖注入、声明式事务管理等核心概念。
  • MyBatis:一个优秀的持久层框架,它提供了 SQL 映射和事务管理。
  • MySQL:关系型数据库管理系统,存储过程是其高级功能之一。

1. 创建 MySQL 存储过程

首先,我们需要在 MySQL 数据库中创建一个名为 CJWDemoFunction 的存储过程。以下是一个简单的存储过程示例,它接受两个输入参数 param1param2

DELIMITER //
CREATE PROCEDURE CJWDemoFunction(IN param1 INT, IN param2 INT, OUT result INT)
BEGIN
    -- 在这里执行你的业务逻辑
    SET result = param1 + param2;
END //
DELIMITER ;

注意:需要根据实际需求修改存储过程的名称和参数


2. 配置数据源

application.properties 文件或yml中,配置数据源和 MyBatis 相关信息:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.type-aliases-package=com.example.demo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true

3. 创建实体类

创建一个 User 实体类,用于映射数据库中的 users 表:

public class User {
    private Integer id;
    private String name;
    private String email;
    // getter and setter methods
}

4. 创建 Mapper 接口

创建一个 UserMapper 接口,用于调用存储过程:

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Procedure;
import java.util.List;

@Mapper
public interface UserMapper {
    @Procedure("CJWDemoFunction")
    int cjwDemoFunction(@Param("param1") int param1, @Param("param2") int param2);
}

5. 创建 Mapper XML 文件

创建一个 UserMapper.xml 文件,用于定义存储过程的输入输出参数:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <procedure id="cjwDemoFunction" statementType="CALLABLE">
        { call CJWDemoFunction(#{param1, mode=IN}, #{param2, mode=IN, jdbcType=INTEGER}), mode=OUT }
    </procedure>
</mapper>

6. 创建 Service 接口及Impl实现类

创建一个 UserService 接口及其实现类 UserServiceImpl,用于调用 UserMapper

public interface UserService {
    int cjwDemoFunction(int param1, int param2);
}

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public int cjwDemoFunction(int param1, int param2) {
        return userMapper.cjwDemoFunction(param1, param2);
    }
}

7. 创建 Controller 类

创建一个 UserController 类,用于处理 HTTP 请求:

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/cjwDemoFunction")
    public ResponseEntity<Integer> cjwDemoFunction(@RequestParam("param1") int param1, @RequestParam("param2") int param2) {
        int result = userService.cjwDemoFunction(param1, param2);
        return new ResponseEntity<>(result, HttpStatus.OK);
    }
}

8. 测试与总结

现在,我们可以启动 Spring Boot 应用,并通过访问 http://localhost:8080/users/cjwDemoFunction?param1=3&param2=5 来查看查询结果。如果一切正常,我们应该可以看到计算结果。

本文详细介绍了如何在 Java Spring 框架下利用 MyBatis 实现请求 MySQL 数据库的存储过程返回查询结果。通过本文的学习,你应该掌握了 MyBatis 的基本配置、调用存储过程的方法以及 Service 和 Controller 的实现。希望本文对你有所帮助!


开心一下

  1. 为什么程序员喜欢在夜里工作?因为这样可以减少 bug 的数量。😂
  2. 为什么程序员总是混淆圣诞节和万圣节?因为 Oct 31 == Dec 25。😂
  3. 为什么程序员喜欢 Unix?因为它有好的可移植性(portability)。😂

编程就像一场马拉松,不要害怕困难和挑战。只要你坚持不懈,不断学习和进步,最终你会到达成功的终点。加油!


END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/550504.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 F103 C8T6开发笔记14:与HLK-LD303-24G测距雷达通信

今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码 文章提供测试代码...... 目录 HLK-LD303-24G测距雷达外观&#xff1a; 线路连接准备&#xff1a; 定时器与串口配置准备&#xff1a; 定时器2的初始化&#xff1a; 串口1、2初始化&#xff1a; 串口1、2自定…

ARP代理

10.1.0.1/8 和10.2.0.1/8是在同一个网段 10.1.0.2/16 和10.2.0.2/16 不在同一个网段 10.1.0.1/8 和10.1.0.2/16 是可以ping通的 包发出来了&#xff0c;报文有发出来&#xff0c;目的地址是广播包 广播请求&#xff0c;发到路由器的接口G 0/0/0 target不是本接口&#xff0…

【C++学习】C++IO流

这里写目录标题 &#x1f680;C语言的输入与输出&#x1f680;什么是流&#x1f680;CIO流&#x1f680;C标准IO流&#x1f680;C文件IO流 &#x1f680;C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取…

windows网络驱动开发

基石&#xff1a;WFP 1、简介 Windows过滤平台&#xff08;Windows Filtering Platform, WFP&#xff09;&#xff0c;是从Vista系统后新增的一套系统API和服务。开发者可以在WFP框架已划分的不同分层中进行过滤、重定向、修改网络数据包&#xff0c;以实现防火墙、入侵检测系…

pdf做批注编辑工具 最新pdf reader pro3.3.1.0激活版

PDF Reader Pro是一款功能强大的PDF阅读和编辑工具。它提供了多种工具和功能&#xff0c;帮助用户对PDF文档进行浏览、注释、编辑、转换和签名等操作。以下是PDF Reader Pro的一些主要特色&#xff1a; 最新pdf reader pro3.3.1.0激活版下载 多种查看模式&#xff1a;PDF Reade…

上海计算机学会 2023年10月月赛 乙组T4 树的覆盖(树、最小点覆盖、树形dp)

第四题&#xff1a;T4树的覆盖 标签&#xff1a;树、最小点覆盖、树形 d p dp dp题意&#xff1a;求树的最小点覆盖集的大小和对应的数量&#xff0c;数量对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取余数。所谓覆盖集&#xff0c;是该树的点构成的集合&#xff0c;…

vue:如何通过两个点的经纬度进行距离的计算(很简单)

首先假设从api获取到了自己的纬经度和别人的纬经度 首先有一个概念需要说一下 地球半径 由于地球不是一个完美的球体&#xff0c;所以并不能用一个特别准确的值来表示地球的实际半径&#xff0c;不过由于地球的形状很接近球体&#xff0c;用[6357km] 到 [6378km]的范围值可以…

板式热交换器强度

1、不同标准中对于板换压板的规定 (1) NB/T 47004.1-2017《板式热交换器 第1部分&#xff1a;可拆卸板式热交换器》6.3压紧板6.3.3条“压紧板应有足够的刚性&#xff0c;以保证板式热交换器在正常操作状态不发生泄漏”。 (2) NB/T 47004-2009《板式热交换器》5.3紧板5.3.3条“…

Springboot+Vue项目-基于Java+MySQL的蜗牛兼职网系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

每日一题 — 串联所有单词的子串

30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;因为words里面的每一个字符串的长度都是固定的&#xff0c;所以可以将题转换成字符在字符串中的所有异位词 设出哈希表定义left和right进窗口维护count判断出窗口维护count 代码&#xff1a; …

[html]一个动态js倒计时小组件

先看效果 代码 <style>.alert-sec-circle {stroke-dasharray: 735;transition: stroke-dashoffset 1s linear;} </style><div style"width: 110px; height: 110px; float: left;"><svg style"width:110px;height:110px;"><cir…

【Qt】:界面优化(一:基本语法)

界面优化 一.基本语法1.设置指定控件样式2.设置全局控件样式3.从文件加载样式表4.使⽤Qt Designer编辑样式&#xff08;最常用&#xff09; 二.选择器1.概述2.子控件选择器3.伪类型选择器 三.盒模型 在网页前端开发领域中,CSS是一个至关重要的部分.描述了一个网页的"样式&…

快速删除node_modules依赖包的命令rimraf

1、安装rimraf npm install -g rimraf 2、使用命令删除node_modules rimraf node_modules *** window系统&#xff0c;使用命令很快就删除node_modules ***

Jmeter 场景测试:登录--上传--下载--登出

为了练习Jmeter的使用&#xff0c;今天我要测试的场景是“登录--上传--下载--登出”这样一个过程. 测试的目标是我曾经练手写的一个文件分享系统&#xff0c;它要求用户只有登录后才可以下载想要的文件。 Jmeter总体结构&#xff1a; 第一步&#xff1a;添加HTTP Cookie管理器…

微信公众号-获取用户位置

目前获取方式为&#xff0c;在用户进入公众号时&#xff0c;提示是否允许获取地理位置&#xff0c;允许后&#xff0c;将地理位置在每次进入公众号时上报给公众号。 则可以根据公众号开发文档&#xff0c;进行上报提示&#xff0c;例如引入邮件系统&#xff0c;进行管理员提示&…

vscode如何方便地添加todo和管理todo

如果想在vscode中更加方便的添加和管理TODO标签&#xff0c;比如添加高亮提醒和查看哪里有TODO标签等&#xff0c;就可以通过安装插件快速实现。 安装插件 VSCode关于TODO使用人数最多的插件是TODO Height和Todo Tree 按住 CtrlShiftX按键进入应用扩展商店&#xff0c;输入to…

Jmeter03:直连数据库

1 Jmete组件&#xff1a;直连数据库 1.1 是什么&#xff1f; 让Jmeter直接和数据库交互 1.2 为什么&#xff1f; 之前是通过接口操作数据库&#xff0c;可能出现的问题&#xff1a;比如查询可能有漏查误查的情况&#xff0c;解决方案是人工对不&#xff0c;效率低且有安全隐患…

【C++题解】1317. 正多边形每个内角的度数?

问题&#xff1a;1317. 正多边形每个内角的度数&#xff1f; 类型&#xff1a;基本运算、小数运算 题目描述&#xff1a; 根据多边形内角和定理&#xff0c;正多边形内角和等于&#xff1a;&#xff08; n&#xff0d;2 &#xff09; 180∘ ( n 大于等于 3 且 n 为整数&#…

STM32 PB3 PB4 无法作为 GPIO 使用解决办法

如下所示&#xff0c;PA13 PA14 PB3 PB4 PB5, 默认是JTAG SWD的 PIN, 需要引脚ReMap 才能作为GPIO 使用。 HAL库解决办法 // __HAL_AFIO_REMAP_SWJ_ENABLE(); //Full SWJ (JTAG-DP SW-DP):// __HAL_AFIO_REMAP_SWJ_NONJTRST(); //Full SWJ (JTAG-DP SW-DP) but without NJTR…

Spring Boot JNA 实现调用 DLL文件(清晰明了)

概述 项目需要用到 重采样算法&#xff0c;JAVA 没有现成的&#xff0c;只能通过 JNA 调用 C 的 DLL 实现&#xff0c;JNA中&#xff0c;它提供了一个动态的C语言编写的转发器&#xff0c;可以自动实现Java和C的数据类型映射。不再需要编写C动态链接库。 实现需求 根据 一个…