最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot整合MyBatis調(diào)用存儲過程的實現(xiàn)

 更新時間:2026年03月13日 11:06:37   作者:程序員西西  
本文介紹了如何在SpringBoot中整合MyBatis調(diào)用存儲過程實現(xiàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

前言

存儲過程是一組通過預(yù)先編譯好的SQL語句,存儲在數(shù)據(jù)庫服務(wù)器中,被視作是可以執(zhí)行的單個調(diào)用的執(zhí)行單元,它允許將一系列SQL語句打包成一個邏輯單元,這樣可以在需要的時候直接來調(diào)用這個邏輯單元來實現(xiàn)相關(guān)的操作。在一個存儲過程中可以包括常用的復(fù)雜數(shù)據(jù)處理、業(yè)務(wù)邏輯操作等。

下面我們就來看看如何在Spring Boot中整合MyBatis調(diào)用存儲過程實現(xiàn)。

存儲過程的結(jié)構(gòu)

CREATE PROCEDURE procedure_name(parameters)
BEGIN
    -- SQL statements
END;

其中,參數(shù)說明情況如下。

  • procedure_name:存儲過程的名稱。
  • parameters:存儲過程的參數(shù)(可選)。

拿一個最經(jīng)典的場景,來進(jìn)行說明,例如有一個表格employees,包含員工的姓名和薪水。我們想要創(chuàng)建一個存儲過程,根據(jù)員工的姓名增加或減少其薪水??梢酝ㄟ^如下的存儲過程來實現(xiàn)。

DELIMITER //
    CREATE PROCEDURE update_salary(IN emp_name VARCHAR(50), IN salary_change DECIMAL(10, 2))
    BEGIN
        UPDATE employees
        SET salary = salary + salary_change
        WHERE name = emp_name;
    END //
DELIMITER ;

上面我們創(chuàng)建了一個名為update_salary的存儲過程,并且這個存儲過程接受了兩個參數(shù),員工的姓名(emp_name)和薪水變動的數(shù)值(salary_change)。

整個的存儲過程包含了一個SQL語句,這個SQL語句就是用來更新員工薪水的SQL語句。要調(diào)用存儲過程,可以使用 CALL 關(guān)鍵字來執(zhí)行調(diào)用,如下所示。

CALL update_salary('John Doe', 500.00);

這個操作就會為 "John Doe" 的員工的薪水500美元。

使用MyBatis 調(diào)用存儲過程?

假設(shè)我們定義了一個存儲過程,用來獲取員工信息,并且其會接收一個員工ID的參數(shù)作為傳入的參數(shù),并且會返回該員工的姓名和薪水,如下所示。

CREATE PROCEDURE get_employee_info(
    IN employeeId INT,
    OUT name VARCHAR(50),
    OUT salary DECIMAL(10, 2)
)
BEGIN
    SELECT name, salary INTO name, salary
    FROM employees
    WHERE id = employeeId;
END;

接下來我們就需要定義一個Mapper的接口用來調(diào)用這個存儲過程。如下所示。

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@Mapper
public interface EmployeeMapper {
    void getEmployeeInfo(@Param("employeeId") int employeeId, @Param("name") String name, @Param("salary") BigDecimal salary);
}

接口定義好之后接下來需要做的事情就是編寫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.mapper.EmployeeMapper">
    <select id="getEmployeeInfo" statementType="CALLABLE">
        {call get_employee_info(#{employeeId, mode=IN, jdbcType=INTEGER}, #{name, mode=OUT, jdbcType=VARCHAR}, #{salary, mode=OUT, jdbcType=DECIMAL})}
    </select>
</mapper>

調(diào)用存儲過程的代碼實現(xiàn)

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
public class Main {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
                EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
                int employeeId = 1;
                String name = null;
                BigDecimal salary = null;
                employeeMapper.getEmployeeInfo(employeeId, name, salary);
                System.out.println("Name: " + name);
                System.out.println("Salary: " + salary);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

這樣我們就完成了在MyBatis中調(diào)用存儲過程的整個操作,啟動代碼我們就可以看到ID為1的用戶的姓名以及薪水信息。

總結(jié)

總結(jié)一下,在實際操作的過程中,我們當(dāng)然不會這么使用,在真實的調(diào)用場景中可能會結(jié)合Controller、Service等處理邏輯來將這個存儲過程更好的利用起來,當(dāng)然了對于參數(shù)的配置、異常的處理在配置的時候一定要注意。很多人無法調(diào)用存儲過程都是因為參數(shù)沒有傳對,所以在實際操作的時候一定要注意相關(guān)的操作。

到此這篇關(guān)于Spring Boot整合MyBatis調(diào)用存儲過程的實現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Boot整合MyBatis調(diào)用存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • k8s解決java服務(wù)下載超時問題小結(jié)

    k8s解決java服務(wù)下載超時問題小結(jié)

    我們在走ingress的java程序的時候,往往會有導(dǎo)出數(shù)據(jù)的功能,這個時候就會有因網(wǎng)絡(luò)慢、后臺處理時間過長導(dǎo)致下載超時,也有因下載文件太大,導(dǎo)致下載失敗,下面給分享k8s解決java服務(wù)下載超時問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Dubbo在Spring和Spring Boot中的使用詳解

    Dubbo在Spring和Spring Boot中的使用詳解

    這篇文章主要介紹了Dubbo在Spring和Spring Boot中的使用詳解,需要的朋友可以參考下
    2017-10-10
  • windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項目演示,需要的朋友可以參考下
    2021-10-10
  • 基于Java Tomcat和激活MyEclips的深入理解

    基于Java Tomcat和激活MyEclips的深入理解

    本篇文章是對Java中的Tomcat和激活MyEclips進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 深入理解Java中的String(示例詳解)

    深入理解Java中的String(示例詳解)

    文章詳細(xì)介紹了Java中String類的特點、用途、主要方法以及常見用法,String類是不可變的,具有字符串常量池,特定的內(nèi)存結(jié)構(gòu),并隨JDK版本更新而優(yōu)化,它廣泛用于表示和處理文本數(shù)據(jù),并在內(nèi)存管理和性能優(yōu)化方面表現(xiàn)出色,感興趣的朋友一起看看吧
    2025-03-03
  • 以Java代碼的方式總結(jié)幾個典型的內(nèi)存溢出案例

    以Java代碼的方式總結(jié)幾個典型的內(nèi)存溢出案例

    作為程序員,多多少少都會遇到一些內(nèi)存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑.今天分享給大家Java內(nèi)存溢出的相關(guān)案例,希望大家在日常工作中,盡量避免寫這些low水平的代碼,需要的朋友可以參考下
    2021-06-06
  • java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹

    這篇文章主要介紹了 java 中函數(shù)的參數(shù)傳遞詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 淺談java安全編碼指南之堆污染

    淺談java安全編碼指南之堆污染

    什么是堆污染呢?是指當(dāng)參數(shù)化類型變量引用的對象不是該參數(shù)化類型的對象時而發(fā)生的。我們知道在JDK5中,引入了泛型的概念,在創(chuàng)建集合類的時候,指定該集合類中應(yīng)該存儲的對象類型。如果在指定類型的集合中,引用了不同的類型,那么這種情況就叫做堆污染。
    2021-06-06
  • Java?中很好用的數(shù)據(jù)結(jié)構(gòu)(你絕對沒用過)

    Java?中很好用的數(shù)據(jù)結(jié)構(gòu)(你絕對沒用過)

    今天跟大家介紹的就是?java.util.EnumMap,也是?java.util?包下面的一個集合類,同樣的也有對應(yīng)的的?java.util.EnumSet,對java數(shù)據(jù)結(jié)構(gòu)相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • Spring MVC的項目準(zhǔn)備和連接建立方法

    Spring MVC的項目準(zhǔn)備和連接建立方法

    SpringWebMVC是基于Servlet API的Web框架,屬于Spring框架的一部分,主要用于簡化Web應(yīng)用程序的開發(fā),SpringMVC通過控制器接收請求,使用模型處理數(shù)據(jù),并通過視圖展示結(jié)果,感興趣的朋友跟隨小編一起看看吧
    2024-10-10

最新評論

大方县| 上蔡县| 九寨沟县| 嘉荫县| 容城县| 九龙县| 涿鹿县| 西充县| 镇巴县| 泗阳县| 墨脱县| 札达县| 曲周县| 津南区| 贵溪市| 淮安市| 开平市| 弋阳县| 淮北市| 灵寿县| 清远市| 齐河县| 侯马市| 罗甸县| 柳林县| 齐河县| 顺平县| 罗甸县| 达州市| 宜良县| 大厂| 黔西县| 信宜市| 勐海县| 焦作市| 基隆市| 百色市| 景泰县| 高平市| 大石桥市| 牡丹江市|