在mybatis用mysql的代碼塊_關于Mybatis 中使用Mysql存儲過程的方法

1.存儲過程的簡介

我們常用的操作數據庫語言SQL語句在執行的時候需要要先編譯,然后執行,而存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給定參數(如果該存儲過程帶有參數)來調用執行它。

一個存儲過程是一個可編程的函數,它在數據庫中創建并保存。它可以有SQL語句和一些特殊的控制結構組成。當希望在不同的應用程序或平臺上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。數據庫中的存儲過程可以看做是對編程中面向對象方法的模擬。它允許控制數據的訪問方式。

2.存儲過程優點

1.存儲過程增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。

2.存儲過程允許標準組件是編程。存儲過程被創建后,可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可以隨時對存儲過程進行修改,對應用程序源代碼毫無影響。

3.存儲過程能實現較快的執行速度。如果某一操作包含大量的Transaction-SQL代碼或分別被多次執行,那么存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優化器對其進行分析優化,并且給出最終被存儲在系統表中的執行計劃。而批處理的Transaction-SQL語句在每次運行時都要進行編譯和優化,速度相對要慢一些。

4.存儲過程能過減少網絡流量。針對同一個數據庫對象的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語句被組織程存儲過程,那么當在客戶計算機上調用該存儲過程時,網絡中傳送的只是該調用語句,從而大大增加了網絡流量并降低了網絡負載。

5.存儲過程可被作為一種安全機制來充分利用。系統管理員通過執行某一存儲過程的權限進行限制,能夠實現對相應的數據的訪問權限的限制,避免了非授權用戶對數據的訪問,保證了數據的安全。

3.存儲過程缺點

1.不易維護,一旦邏輯變了修改起來麻煩

2.如果寫此存儲過程的人離職了,對于接手她代碼的人估計是一場災難,因為別人還要去讀懂你程序邏輯,還要讀懂你存儲邏輯。不利于擴展。

3.最大的缺點! 雖然存儲過程可以減少代碼量,提高開發效率。但是有一點非常致命的就是太耗性能。

下面通過代碼介紹下mybatis 中 使用MYSQL存儲過程;

##1.有學生表student(id,name,age,money)

##2.創建查詢學生表信息的存儲過程:

delimiter |

create Procedure showAllstu()

BEGIN

SELECT * FROM student ORDER BY id DESC LIMIT 6;

END

delimiter

##2.創建(通過學生id)刪除記錄的存儲過程:

```

delimiter |

create Procedure delById(d int(11))

BEGIN

delete from student where id=d;

END

delimiter

##3.maven中創建項目:(略)

//pox.xml 配置:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.metar

Mybatis-mysql

war

1.0

Mybatis-mysql Maven Webapp

http://maven.apache.org

junit

junit

4.12

test

org.projectlombok

lombok

1.16.20

provided

org.mybatis

mybatis

3.4.6

mysql

mysql-connector-java

6.0.6

ch.qos.logback

logback-classic

1.2.3

test

${project.artifactId}

src/test/java

src/main/java

src/main/java

**/*.xml

**/*.properties

src/main/resources

**/*.xml

**/*.properties

##4.鏈接數據庫入口配置(略),配置:mybatis-config.xml:

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

##5.創建實體類對象:

//包:com/fz/entity/Student

@Data

public class Student {

private int id;

private String name;

private int age;

private double money;

}

##6.創建StudentMapper 接口類和StudentMapper.xml配置;

// StudentMapper 接口類

public interface StudentMapper {

//存儲過程查詢6條記錄;

public List query();

//存儲過程刪除一條記錄(通過id)

public int delById(int id);

}

//StudentMapper.xml配置

```

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

{call showAllstu()}

{call delById(#{id})}

##7.測試 類:

//test/java/com/Demo01

package com;

import com.fz.entity.Student;

import com.fz.mapper.StudentMapper;

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 org.junit.After;

import org.junit.Before;

import org.junit.Test;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

public class Demo01 {

protected SqlSessionFactory sf;

protected SqlSession ss;

@Test

public void test(){

StudentMapper sdd = this.ss.getMapper(StudentMapper.class);

List atd = sdd.query();

for (Student sd:atd){

System.out.println(sd);

}

sdd.delById(18);

}

@Before

public void init(){

InputStream is=null;

try {

is= Resources.getResourceAsStream("mybatis-config.xml");

this.sf=new SqlSessionFactoryBuilder().build(is);

this.ss=this.sf.openSession();

} catch (IOException e) {

e.printStackTrace();

}

}

@After

public void close(){

this.ss.commit();

this.ss.close();

}

}

補充:

下面看下存儲過程的語法

1 創建存儲過程

create procedure sp_name()

begin

.........

end

2 調用存儲過程

call sp_name()

注意:存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞

3 刪除存儲過程

drop procedure sp_name//

注意:不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程

4其他常用命令

show procedure status

顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等

show create procedure sp_name

顯示某一個MySQL存儲過程的詳細信息

總結

以上所述是小編給大家介紹的Mybatis 中使用Mysql存儲過程的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL5.6免安裝配置與“系統找不到指定的文件”錯誤

1.下載免安裝版本的mysql-5.6.11-winx64 (本機 win7 64位)2.將文件解壓到任意,不要有中文(有中文的情況沒試過,不過最好避免這種情況)3.配置mysql 環境變量,在 path后面加上D:\Program Files\mysql-5.6.11-winx64\bin…

安裝配置OSA運維管理平臺

1、下載完整包V1.0.2wget http://www.osapub.com/download/OSA_BETA_V1.0.2.tar.gzV1.0.5wget http://www.osapub.com/download/OSA_BETA_V1.0.5.tar.gz 2、解壓安裝tar xvf OSA_BETA_V1.0.5.tar.gzmv osa /usr/local/ PS:該版本只允許指向/usr/local/osa/目錄&…

as5300g2 nas軟件功能_【浪潮混閃存儲AS5300G5-可同時提供SAN和NAS兩種服務的中端混閃存儲系統】價格_廠家 - 中國供應商...

功能特性極速性能(1)平臺升級:G5采用全新一代硬件平臺,芯片升級、規格升級,性能同比上一代平均提升30%,為提高存儲系統的數據處理效率提供有力支撐。同時結合G5的智能軟件,如智能緩存加速、智能分層、智能QOS等高級功能…

c 總結

C-總結 #pragma mark - 第一章:C基礎 void func1(); void func1() { // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int a 030; // 以0開頭得數是八進制的數,計算的時候要換算成10進制進行計算 int b a * 10; printf("%d", b); // 此時打印…

windows下使用cpanm進行模塊安裝

windows下使用cpanm進行模塊安裝要放假了,突然想整理一下手頭上的軟件,突然發現perl的安裝模塊這個功能不能用。弄了一下,使得windows 下 perl 的 cpanm能用,避免成天為了依賴痛苦。軟件版本:#理論上此方法所有版本通用…

Response緩沖區

1 protected void Page_Load(object sender, EventArgs e)2 {3 //關閉緩沖區,輸出會一個一個寫出來(只有在火狐瀏覽器中才有效果)。4 //Response.BufferOutput false;5 6 //開啟緩沖區7 Response.Buffe…

Javascript模塊模式學習分享

之前一直也有聽說和接觸到模塊模式、這次整理了一下、感覺蠻有收獲的、特來分享。 模塊模式很基本的一點就是匿名函數的 閉包、通過這點來實現。 1 //模塊模式2 3 var MODULE (function(){4 /*函數默認是返回this的、但是定義了my對象后、return my; 返回值就變成了my對象…

Source Insight基本使用和快捷鍵

為什么要用Source Insight呢?貌似是因為比完整的IDE要更快一些,比較利于查看大量的代碼。 軟件的安裝很簡單,設置好安裝目錄。 配置好文檔路徑,當然這個也可以在Options里面改,選Options->Preferences…里面的Folde…

powerquery mysql數據庫_window 10 下 --excel | power query 通過 ODBC鏈接 mysql 數據庫

excel鏈接到mysql的方法有幾種,今天主要介紹如何通過ODBC鏈接odbc是 “開放數據庫連接”,你可以通過下載插件使得自己的excel可以連接到不同的數據庫。關于版本的選擇,就是excel版本obdc版本mysql obdc版本(需要一樣)第一步 下載mysql odbc…

table樣式

一直以來&#xff0c;css和JS都是軟肋&#xff0c;因為需要不得不重新溫故。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style type"text/css">table.hover…

MAC和XCODE常用快捷鍵

摘自&#xff1a;http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html 1. 文件CMD N: 新文件CMD SHIFT N: 新項目CMD O: 打開CMD S: 保存CMD SHIFT S: 另存為CMD W: 關閉窗口CMD SHIFT W: 關閉文件2. 編輯CMD [: 左縮進CMD ]: 右縮進CMD CTRL LEFT: …

數組與內存控制

注&#xff1a;我已對本文章進行了更新&#xff0c;勞煩移步。 java語言是典型的靜態語言&#xff0c;因而&#xff0c;數組也是靜態的&#xff0c;即當該數組被初始化之后&#xff0c;該數組的長度是不可變的。java 語言的數組變量是引用類型&#xff0c;什么意思呢&#xff1…

NRedis-Proxy - 高性能中間件服務器

2019獨角獸企業重金招聘Python工程師標準>>> 高性能中間件服務器 一、 NRedis-Proxy 介紹 NRedis-Proxy 是一個Redis中間件服務&#xff0c;第一個Java 版本開源Redis中間件&#xff0c;無須修改業務應用程序任何代碼與配置&#xff0c;與業務解耦&#xff1b;以Spr…

python圖片識別驗證碼軟件_python識別圖片驗證碼

http://robertgawron.blogspot.hk/2010/11/almost-all-sites-use-images-with-text.html圖片的識別主要有&#xff0c;去色&#xff0c;減噪&#xff0c;去線&#xff0c;分割&#xff0c;二值化&#xff0c;提取特征碼這里比較方便的是使用tesseract1&#xff0c;準備庫apt-ge…

POJ_1253勝利的大逃亡

這道題使用BFS做的&#xff0c;剛開始有點不太理解為什么使用隊列&#xff0c;一旦遇到可以到達終點的節點就立即返回&#xff0c;找到最短時間&#xff0c;最后明白了&#xff0c;因為在隊列里的所有節點一定比隊頭節點 的時間長。下面是具體代碼&#xff1a; #include<std…

博客搬家算法偽碼

已有平臺&#xff1a;CSDN博客、51CTO、博客園、WordPress不同平臺的博客&#xff0c;數據解析方式不一樣&#xff0c;數據抓取和存儲都是類似的。1.確定博客首頁地址a.平臺地址比如&#xff0c;CSDN的博客地址是 http://blog.csdn.net/b.賬號fansunionCSDN某個用戶的地址是&am…

用js做分頁,點擊下一頁時,直接跳到了最后一頁——Number()的妙用

Number()的妙用 Number()是javascript中將字符型轉換為數值型的函數&#xff1b;問題描述&#xff1a;做分頁&#xff0c;用js實現&#xff0c;獲取當前頁面的值&#xff0c;然后js自加1&#xff0c;可是點擊下一頁時&#xff0c;直接跳到最后一頁。選擇跳轉到某頁的時候&#…

讓Apache支持Wap網站

日前搭建一臺Wap網站&#xff0c;環境為RedHat EL5ApachePHPMysql&#xff0c;要求支持wml文件。現將涉及到的配置修改記錄如下&#xff1a;1、修改Apache的httpd.conf文件&#xff0c;增加如下內容。AddType application/x-httpd-php .wmlAddType text/vnd.wap.wml .wml;chars…

vue傳中文標點_vue項目引入第三方高德地圖實現標點定位

vue項目中&#xff0c;高德地圖使用。引入vue中。異步導入vue中。gaoDe(key) {window.onApiLoaded function () {var map new AMap.Map(container, {resizeEnable: true,center: [113.951955, 22.530825],zoom: 16});}var url https://webapi.amap.com/maps? v1.4.15&k…

CVE-2014-4877 wget: FTP Symlink Arbitrary Filesystem Access

目錄 1. 漏洞基本描述 2. 漏洞帶來的影響 3. 漏洞攻擊場景重現 4. 漏洞的利用場景 5. 漏洞原理分析 6. 漏洞修復方案 7. 攻防思考 1. 漏洞基本描述 0x1: Wget簡介 wget是一個從網絡上自動下載文件的自由工具&#xff0c;支持通過HTTP、HTTPS、FTP三個最常見的TCP/IP協議下載&am…