MyBatis如何调用mysql数据库存储过程

   日期:2020-09-27     浏览:91    评论:0    
核心提示:MyBatis如何调用mysql数据库存储过程存储过程的含义:是一组预先写好的能实现某种功能的T-SQL程序,是存储在服务器上的预编译集合。(存储过程是一种独立的数据库对象,在服务器上创建和运行。)存储过程的优点:模块化编程、执行速度快效率高、减少网络流量、提供一种安全机制。(存储过程在执行1次后,其执行计划就保存在内存中,以后在执行时就不必再进行编译和优化。)在mysql服务带宽不够,或者说与服务连接不稳定时,再者还有可能sql命令过长。在这种情况下导致的服务响应慢,可以通过使用数据库的存储过

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


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就可以,其实存储过程可以定义的很复杂,我这里为了演示,就未作过多的说明。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服