iBATIS - Gespeicherte Prozeduren

Sie können eine gespeicherte Prozedur mithilfe der iBATIS-Konfiguration aufrufen. Lassen Sie uns zunächst verstehen, wie eine gespeicherte Prozedur in MySQL erstellt wird.

Wir haben die folgende EMPLOYEE-Tabelle in MySQL -

CREATE TABLE EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

Lassen Sie uns die folgende gespeicherte Prozedur in der MySQL-Datenbank erstellen:

DELIMITER $$

   DROP PROCEDURE IF EXISTS `testdb`.`getEmp` $$
   CREATE PROCEDURE `testdb`.`getEmp` 
   (IN empid INT)
	
   BEGIN
      SELECT * FROM EMPLOYEE
      WHERE ID = empid;
   END $$

DELIMITER;

Angenommen, die Tabelle EMPLOYEE enthält zwei Datensätze wie folgt:

mysql> select * from EMPLOYEE;
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
|  1 | Zara       | Ali       |   5000 |
|  2 | Roma       | Ali       |   3000 |
+----+------------+-----------+--------+
2 row in set (0.00 sec)

Mitarbeiter POJO Klasse

Um die gespeicherte Prozedur zu verwenden, müssen Sie die Datei Employee.java nicht ändern. Lassen Sie es so bleiben, wie es im letzten Kapitel war.

public class Employee {
   private int id;
   private String first_name; 
   private String last_name;   
   private int salary;  

   /* Define constructors for the Employee class. */
   public Employee() {}
  
   public Employee(String fname, String lname, int salary) {
      this.first_name = fname;
      this.last_name = lname;
      this.salary = salary;
   }

   /* Here are the required method definitions */
   public int getId() {
      return id;
   }
	
   public void setId(int id) {
      this.id = id;
   }
	
   public String getFirstName() {
      return first_name;
   }
	
   public void setFirstName(String fname) {
      this.first_name = fname;
   }
	
   public String getLastName() {
      return last_name;
   }
	
   public void setlastName(String lname) {
      this.last_name = lname;
   }
	
   public int getSalary() {
      return salary;
   }
	
   public void setSalary(int salary) {
      this.salary = salary;
   }

} /* End of Employee */

Employee.xml-Datei

Hier würden wir Employee.xml so ändern, dass die Tags <procedure> </ process> und <parameterMap> </ parameterMap> eingeführt werden. Hier hätte das Tag <procedure> </ process> eine ID, die wir in unserer Anwendung zum Aufrufen der gespeicherten Prozedur verwenden würden.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Employee">

   <!-- Perform Insert Operation -->
   <insert id="insert" parameterClass="Employee">
      INSERT INTO EMPLOYEE(first_name, last_name, salary)
      values (#first_name#, #last_name#, #salary#)

      <selectKey resultClass="int" keyProperty="id">
         select last_insert_id() as id
      </selectKey>
   </insert>

   <!-- Perform Read Operation -->
   <select id="getAll" resultClass="Employee">
      SELECT * FROM EMPLOYEE
   </select>

   <!-- Perform Update Operation -->
   <update id="update" parameterClass="Employee">
      UPDATE EMPLOYEE
      SET    first_name = #first_name#
      WHERE  id = #id#
   </update>

   <!-- Perform Delete Operation -->
   <delete id="delete" parameterClass="int">
      DELETE FROM EMPLOYEE
      WHERE  id = #id#
   </delete>

   <!-- To call stored procedure. -->
   <procedure id="getEmpInfo" resultClass="Employee" parameterMap="getEmpInfoCall">
      { call getEmp( #acctID# ) } 
   </procedure>
	
   <parameterMap id="getEmpInfoCall" class="map">
      <parameter property="acctID" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
   </parameterMap>

</sqlMap>

IbatisSP.java-Datei

Diese Datei verfügt über eine Logik auf Anwendungsebene, mit der die Namen der Mitarbeiter mithilfe von ResultMap aus der Employee-Tabelle gelesen werden können.

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class IbatisSP{
   public static void main(String[] args) throws IOException,SQLException{
   
      Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
      SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);

      int id = 1;
      System.out.println("Going to read employee name.....");
      Employee e = (Employee) smc.queryForObject ("Employee.getEmpInfo", id);

      System.out.println("First Name:  " + e.getFirstName());
      System.out.println("Record name Successfully ");
   }
}

Kompilieren und Ausführen

Hier sind die Schritte zum Kompilieren und Ausführen der oben genannten Software. Stellen Sie sicher, dass Sie PATH und CLASSPATH richtig eingestellt haben, bevor Sie mit der Kompilierung und Ausführung fortfahren.

  • Erstellen Sie Employee.xml wie oben gezeigt.
  • Erstellen Sie Employee.java wie oben gezeigt und kompilieren Sie es.
  • Erstellen Sie IbatisSP.java wie oben gezeigt und kompilieren Sie es.
  • Führen Sie die IbatisSP-Binärdatei aus, um das Programm auszuführen.

Sie würden das folgende Ergebnis erhalten -

Going to read employee name.....
First Name:  Zara
Record name Successfully