日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法

發(fā)布時間:2023/12/10 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.存儲過程的簡介

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

一個存儲過程是一個可編程的函數(shù),它在數(shù)據(jù)庫中創(chuàng)建并保存。它可以有SQL語句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺上執(zhí)行相同的函數(shù),或者封裝特定功能時,存儲過程是非常有用的。數(shù)據(jù)庫中的存儲過程可以看做是對編程中面向?qū)ο蠓椒ǖ哪M。它允許控制數(shù)據(jù)的訪問方式。

2.存儲過程優(yōu)點

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

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

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

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

5.存儲過程可被作為一種安全機制來充分利用。系統(tǒng)管理員通過執(zhí)行某一存儲過程的權(quán)限進行限制,能夠?qū)崿F(xiàn)對相應(yīng)的數(shù)據(jù)的訪問權(quán)限的限制,避免了非授權(quán)用戶對數(shù)據(jù)的訪問,保證了數(shù)據(jù)的安全。

3.存儲過程缺點

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

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

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

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

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

##2.創(chuàng)建查詢學(xué)生表信息的存儲過程:

delimiter |

create Procedure showAllstu()

BEGIN

SELECT * FROM student ORDER BY id DESC LIMIT 6;

END

delimiter

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

```

delimiter |

create Procedure delById(d int(11))

BEGIN

delete from student where id=d;

END

delimiter

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

//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.鏈接數(shù)據(jù)庫入口配置(略),配置:mybatis-config.xml:

/p>

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

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

##5.創(chuàng)建實體類對象:

//包:com/fz/entity/Student

@Data

public class Student {

private int id;

private String name;

private int age;

private double money;

}

##6.創(chuàng)建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 創(chuàng)建存儲過程

create procedure sp_name()

begin

.........

end

2 調(diào)用存儲過程

call sp_name()

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

3 刪除存儲過程

drop procedure sp_name//

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

4其他常用命令

show procedure status

顯示數(shù)據(jù)庫中所有存儲的存儲過程基本信息,包括所屬數(shù)據(jù)庫,存儲過程名稱,創(chuàng)建時間等

show create procedure sp_name

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

總結(jié)

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

總結(jié)

以上是生活随笔為你收集整理的在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。