Mybatis를 통해 MySQL 저장 프로시저를 호출하는 예제에 대한 자세한 설명

零下一度
풀어 주다: 2018-05-15 17:43:35
원래의
1588명이 탐색했습니다.

이 기사에서는 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. 가장 큰 단점! 저장 프로시저를 사용하면 코드 양을 줄이고 개발 효율성을 높일 수 있습니다. 하지만 매우 치명적인 점 중 하나는 성능을 너무 많이 소모한다는 점이다.

4. 저장 프로시저 구문

4.1 저장 프로시저 생성

create procedure sp_name()
begin
.........
end
로그인 후 복사

4.2 저장 프로시저 호출

call sp_name()
로그인 후 복사

참고: 저장 프로시저에 전달된 매개변수가 없더라도 저장 프로시저 이름 뒤에 괄호를 추가해야 합니다.

4.3 저장 프로시저 삭제

drop procedure sp_name//
로그인 후 복사

참고: 한 번에 다른 저장 프로시저를 삭제할 수 없습니다. 다른 저장 프로시저만 호출할 수 있습니다.

4.4 기타 일반 명령

show procedure status
로그인 후 복사

속해 있는 데이터베이스, 이름 등 데이터베이스에 있는 모든 저장 프로시저의 기본 정보를 표시합니다. 저장 프로시저, 생성 시간 등

show create procedure sp_name
로그인 후 복사

특정 MySQL 저장 프로시저의 상세 정보 표시

5. MySQL 저장 프로시저를 호출하는 MyBatis의 사례 구현

5.1 케이스 간략한 설명

케이스는 주로 특정 이름을 가진 장치의 총 개수를 단순히 세는 방식으로 구현됩니다.

5.2 데이터베이스 테이블 생성

DROP TABLE IF EXISTS `cus_device`;
CREATE TABLE `cus_device` (
 `device_sn` varchar(20) NOT NULL COMMENT '设备编号',
 `device_cat_id` int(1) DEFAULT NULL COMMENT '设备类型',
 `device_name` varchar(64) DEFAULT NULL COMMENT '设备名称',
 `device_type` varchar(64) DEFAULT NULL COMMENT '设备型号',
 PRIMARY KEY (`device_sn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
로그인 후 복사

5.3 저장 프로시저 생성

장치 이름을 입력 매개변수로, 카운트된 전체 장치 수를 출력 매개변수로 사용

DROP PROCEDURE IF EXISTS `countDevicesName`;
DELIMITER ;;
CREATE PROCEDURE `countDevicesName`(IN dName VARCHAR(12),OUT deviceCount INT)
BEGIN
SELECT COUNT(*) INTO deviceCount FROM cus_device WHERE device_name = dName;

END
;;
DELIMITER ;
로그인 후 복사

5.4 Mybatis는 MySQL 저장 프로시저를 호출합니다

1. mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC  
  "-//mybatis.org//DTD Config 3.0//EN" 
  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 

  <settings>
  <!-- 打印查询语句 -->
    <setting name="logImpl" value="STDOUT_LOGGING" />
  </settings>
  <!-- 配置别名 --> 
  <typeAliases> 
    <typeAlias type="com.lidong.axis2demo.DevicePOJO" alias="DevicePOJO" />  
  </typeAliases> 

  <!-- 配置环境变量 --> 
  <environments default="development"> 
    <environment id="development"> 
      <transactionManager type="JDBC" /> 
      <dataSource type="POOLED"> 
        <property name="driver" value="com.mysql.jdbc.Driver" /> 
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/bms?characterEncoding=GBK" /> 
        <property name="username" value="root" /> 
        <property name="password" value="123456" /> 
      </dataSource> 
    </environment> 
  </environments> 

  <!-- 配置mappers --> 
  <mappers> 
    <mapper resource="com/lidong/axis2demo/DeviceMapper.xml" /> 
  </mappers> 

</configuration>
로그인 후 복사

2. DeviceDAO 구현

public class DevicePOJO{

   private String devoceName;//设备名称
   private String deviceCount;//设备总数


  public String getDevoceName() {
    return devoceName;
  }
  public void setDevoceName(String devoceName) {
    this.devoceName = devoceName;
  }
  public String getDeviceCount() {
    return deviceCount;
  }
  public void setDeviceCount(String deviceCount) {
    this.deviceCount = deviceCount;
  }
}
로그인 후 복사

4.Mapper 구현

package com.lidong.axis2demo;

public interface DeviceDAO {

  /**
   * 调用存储过程 获取设备的总数
   * @param devicePOJO
   */
  public void count(DevicePOJO devicePOJO);

}
로그인 후 복사

참고:statementType="CALLABLE"은 CALLABLE이어야 하며 MyBatis에게 저장 프로시저를 실행하라고 지시합니다. 그렇지 않으면 오류가 보고됩니다.

스레드 "main의 예외" ” org.apache.ibatis.Exceptions.PersistenceException


mode=IN 입력 매개변수 mode=OUT 출력 매개변수 jdbcType은 데이터베이스에 의해 정의된 필드 유형입니다.

이와 같이 Mybatis를 작성하면 출력 deviceCount 값을 자동으로 채우는 데 도움이 됩니다.


5. 테스트

아아아

결과


위 내용은 Mybatis를 통해 MySQL 저장 프로시저를 호출하는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!