一般的に使用される操作データベース言語SQLステートメントを最初にコンパイルし、実行時に実行する必要があります。ストアドプロシージャは、特定の関数を完了するためのSQLステートメントのセットです。コンパイル後、データベースに保存されます。ユーザーは、ストアドプロシージャの名前を指定し、パラメーターを提供することにより、呼び出して実行します(ストアドプロシージャにパラメーターがある場合)。
ストアドプロシージャは、データベースに作成および保存されるプログラム可能な機能です。 SQLステートメントといくつかの特別な制御構造で構成できます。ストアドプロシージャは、異なるアプリケーションまたはプラットフォームで同じ関数を実行するか、特定の機能をカプセル化する場合に非常に便利です。データベースのストアドプロシージャは、プログラミングにおけるオブジェクト指向の方法のシミュレーションと見なすことができます。データへのアクセス方法を制御できます。
1.ストアドプロシージャは、SQL言語の機能と柔軟性を向上させます。ストアドプロシージャは、柔軟性が強く、複雑な判断を完了し、より複雑な操作を完了することができるフロー制御ステートメントに記述できます。
2。ストアドプロシージャにより、標準コンポーネントをプログラムできます。ストアドプロシージャが作成された後、ストアドプロシージャのSQLステートメントを書き換えることなく、プログラムで複数回呼び出すことができます。さらに、データベースの専門家は、アプリケーションソースコードに影響を与えることなく、いつでもストアドプロシージャを変更できます。
3.ストアドプロシージャは、より速い実行速度を達成できます。操作に大量のTransaction-SQLコードが含まれているか、それぞれ複数回実行されている場合、ストアドプロシージャはバッチ処理よりもはるかに高速です。ストアドプロシージャが事前補償されているためです。ストアドプロシージャが最初に実行されると、オプティマイザーはそれを分析および最適化し、最終的にシステムテーブルに保存される実行計画を提供します。バッチ処理トランザクションSQLステートメントは、実行するたびにコンパイルおよび最適化する必要があります。これは比較的遅いです。
4.ストアドプロシージャは、市販の場合によってネットワークトラフィックを削減できます。同じデータベースオブジェクトの操作(クエリ、変更など)の場合、この操作に関与するトランザクション-SQLステートメントが組織プロセスによって保存される場合、クライアントコンピューターでストアドプロシージャが呼び出されると、ネットワーク内でコールステートメントのみが送信され、ネットワークトラフィックが大幅に増加し、ネットワーク負荷が減少します。
5。ストアドプロシージャは、セキュリティメカニズムとして完全に利用できます。システム管理者は、特定のストアドプロシージャにアクセス許可を実行し、不正ユーザーによるデータへのアクセスを回避し、データセキュリティを確保することにより、対応するデータへのアクセス権を制限できます。
1.メンテナンスは簡単ではありません。ロジックが変更されると、変更するのは面倒です
2。このストアドプロシージャを書いた人が去る場合、他の人があなたのプログラムロジックとストレージロジックを理解しなければならないため、彼女のコードを引き継いだ人にとってはおそらく災害です。拡張を助長しません。
3。最大の不利益!ストアドプロシージャはコードの量を減らし、開発効率を向上させることができます。しかし、1つのことは非常に致命的であり、パフォーマンスを消費しすぎています。
以下は、MyBatisでMySQLストアドプロシージャを導入するためのコードです。
## 1。学生テーブルの学生(ID、名前、年齢、お金)## 2があります。学生テーブル情報を照会するためのストアドプロシージャを作成する:Delimiter |手順を作成しますshowallstu()begin select * from sudute order by id desc limit 6; enddelimiter ## 2。レコードを削除するためのストアドプロシージャを作成します(学生IDを介して): `` delimiter |手順Delbyid(d int(11))を作成します。学生から削除を開始し、id = d; enddelimiter ## 3。 Mavenでプロジェクトを作成する:(省略)//pox.xml構成:<プロジェクトXMLNS = "http://maven.apache.org/pom/4.0.0" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0_0.0.xsd"> <modelversion> 4.0.0 </modelversion> <groupid> com.metar </groupid> </groupid> </groupid> </groupid> </groupid> </artifid> </artifid <Packaging> War </Packaging> <version> 1.0 </version> <name> mybatis-mysql maven webapp </name> <url> http://maven.apache.org </url> <dependencies> <deplency> <segrougid> junit </groupid> <artifactid> <scope> test </scope> </dependency> <dependency> groupid> org.projectlombok </groupid> <artifactid> lombok </artifactid> <バージョン> 1.16.20 </バージョン> <scope> <バージョン> 3.4.6 </version> </dependency> <dependency> groupid> mysql </groupid> <artifactid> mysql-connector-java </artifactid> <バージョン> 6.0.6 </version> </dependency> <依存関係> <groupid.qos.logback <バージョン> 1.2.3 </version> <scope> test </scope> </dependency> </dependencies> <burtion> <finalName> $ {project.artifactid} </finalName> <testSourcedirectory> src/test/java </java </testsourcedirectory> <sourcederectory>ファイルはロードできません - > <リソース> <リソース> <directory> src/main/java </directory> <include> <cludent> **/*。xml </inctunt> <condic> **/*。プロパティ</incturies> <cluding> **/*。プロパティ</include> </resource> </build> </project> ## 4。リンクデータベースエントリ構成(省略)、構成:mybatis-config.xml:<?xml version = "1.0" encoding = "utf-8"?> <!mybatis.org//dtd config 3.0 // en "" http://mybatis.org/dtd/dtddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddt <configuration> <! - これはリソースデータベースの構成ポータルです - > <プロパティリソース= "db.properties"/> <! - ログ設定をオンにします - > <settings> <settings> <setting name = "logprefix" value = "dao。エイリアス= "st"/> - > <! - 指定されたパッケージの下にあるすべてのエイリアスを構成// com.fz.entityパッケージbook.javaブックの下のモデルクラスの小型キャラクターエイリアスはエイリアス - > <パッケージ名= "com.fz.entity"/>> </ypealiase> <環境= ""> <envidement "> <envidement"> <transactionmanager type = "Pooled"> <Property name = "Driver" value = "$ {db.driver}"/> <プロパティ名= "url" value = "$ {db.url}"/> <プロパティ名= "username" value = "$ {db.user}"/>> <プロパティname = "propertial name" $ "$ {db.password> </</</</> < </環境> <mappers> <! - <mapper/> - > <package name = "com.fz.mapper"/> </mappers> </configuration> ## 5。 Entityクラスオブジェクトを作成://パッケージ:com/fz/entity/sudine @data public class Student {private int id;プライベート文字列名;プライベートインクエイジ;プライベートダブルマネー; } ## 6。 StudentMapperインターフェイスクラスとStudentMapper.xml構成を作成します。 // StudentMapper Interface StudentMapper {//ストアドプロシージャクエリ6レコード。パブリックリスト<Student> Query(); //ストアドプロシージャはレコードを削除します(IDによる)public int delbyid(int id); } //StudentMapper.xml Configuration````````````````````````````` version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" http://mybatis.org/dtd/mybatis-3-mapper. namespace = "com.fz.mapper.studentmapper"> <select id = "query" resulttype = "sustent"> {call showallstu()} </select> <delete id = "delbeid" parametertype = "int"> {call delbyid(#{id}}} </delete> </mapper>##7。テストクラス:// test/java/com/demo01パッケージcom; com.fz.entity.studentをインポートします。 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; org.junit.afterをインポートします。 org.junit.beforeをインポートします。 Import org.junit.test; java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.util.listをインポートします。 Public Class Demo01 {Protected SQLSessionFactory SF;保護されたsqlsession ss; @test public void test(){sustentmapper sdd = this.ss.getMapper(sustentmapper.class);リスト<Student> 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ストアドプロシージャを作成します
手順を作成しますsp_name()begin ......... end
2ストアドプロシージャの呼び出し
call sp_name()
注:ストアドプロシージャのパラメーターが渡されていなくても、ストアドプロシージャ名の後にブラケットが続く必要があります。
3ストアドプロシージャを削除します
drop procedure sp_name//
注:1つのストアドプロシージャで別のストアドプロシージャを削除することはできません。別のストアドプロシージャのみを呼び出すことができます。
4つの他の共通コマンド
show procedure status
データベースに属するデータベース、ストアドプロシージャの名前、作成時間などを含む、データベースに保存されているすべてのストアドプロシージャの基本情報を表示します。
show create procedure sp_name
MySQLストアドプロシージャの詳細情報を表示します
要約します
上記は、MyBatisでMySQLストアドプロシージャを使用する方法です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!