MyBatis如何呼叫mysql資料庫存盤程序
存盤程序的含義:是一組預先寫好的能實作某種功能的T-SQL程式,是存盤在服務器上的預編譯集合,
(存盤程序是一種獨立的資料庫物件,在服務器上創建和運行,)
存盤程序的優點:模塊化編程、執行速度快效率高、減少網路流量、提供一種安全機制,(存盤程序在執行1次后,其執行計劃就保存在記憶體中,以后在執行時就不必再進行編譯和優化,)
在mysql服務帶寬不夠,或者說與服務連接不穩定時,再者還有可能sql命令過長,在這種情況下導致的服務回應慢,可以通過使用資料庫的存盤程序來進行優化,
mybatis是目前市場上最流行的持久層框架,本身就支持對資料庫存盤程序的呼叫,
1.根據需要創建自己所需的存盤程序
使用我本地的臨時的測驗表來作為演示物件
test 表

- 創建查詢用存盤程序
#查詢用存盤程序
DELIMITER //
CREATE PROCEDURE pSelect (IN p_id INT,IN p_version INT) BEGIN
SELECT
*
FROM
test
WHERE id=p_id
AND version = p_version;
END //
DELIMITER;
- 創建插入用存盤程序
#插入用存盤程序
DELIMITER //
CREATE PROCEDURE pInsert (IN p_text VARCHAR(20),IN p_version INT) BEGIN
INSERT INTO test
(text,version)
VALUES
(p_text,p_version);
END //
DELIMITER;
- 創建更新用存盤程序
#更新用存盤程序
DELIMITER //
CREATE PROCEDURE pUpdate (IN p_id INT,IN p_text VARCHAR(20),IN p_version INT) BEGIN
UPDATE test SET text=p_text,version=p_version
WHERE id = p_id;
END //
DELIMITER;
- 創建洗掉用存盤程序
#洗掉用存盤程序
DELIMITER //
CREATE PROCEDURE pDelete (IN p_id INT) BEGIN
DELETE FROM test WHERE id=p_id;
END //
DELIMITER;
創建存盤程序的語法類似一般的方法宣告,宣告傳入引數,在BEGIN~END 之間也還是遵循一般CRUD的sql語法,
2.定義DAO
/**
* @author machenike
*/
public interface TestDao {
List<TestEntity> queryAll();
List<TestEntity> select(TestEntity testEntity);
int update(TestEntity testEntity);
int delete(Integer id);
int insert(TestEntity testEntity);
}
3.Mapper.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="club.dlblog.dao.TestDao">
<select id="queryAll" resultType="club.dlblog.entity.TestEntity">
SELECT * FROM test
</select>
<!--查詢-呼叫存盤程序-->
<select id="select" resultType="club.dlblog.entity.TestEntity"
parameterType="club.dlblog.entity.TestEntity"
statementType="CALLABLE">
{CALL pSelect(#{id,mode=IN},#{version,mode=IN})}
</select>
<!--插入-呼叫存盤程序-->
<insert id="insert" parameterType="club.dlblog.entity.TestEntity"
statementType="CALLABLE">
{CALL pInsert(#{text,mode=IN},#{version,mode=IN})}
</insert>
<!--更新-呼叫存盤程序-->
<update id="upadate" parameterType="club.dlblog.entity.TestEntity"
statementType="CALLABLE">
{CALL pUpdate(#{id,mode=IN},#{text,mode=IN},#{version,mode=IN})}
</update>
<!--洗掉-呼叫存盤程序-->
<delete id="delete" parameterType="java.lang.Integer"
statementType="CALLABLE">
{CALL pDelete(#{id,mode=IN})}
</delete>
</mapper>
需要注意與傳統的mapper的定義其實差別不大,statementType="CALLABLE"
記得宣告命令型別,***#{id,mode=IN}*** 作為入參的引數記得注意書寫格式,
接下來直接呼叫testDao就可以,其實存盤程序可以定義的很復雜,我這里為了演示,就未作過多的說明,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/131999.html
標籤:其他
上一篇:事務
下一篇:MySql百萬資料0秒篩選查詢
