iBATIS - Crea operazione

Per eseguire qualsiasi operazione di creazione, lettura, aggiornamento ed eliminazione (CRUD) utilizzando iBATIS, è necessario creare una classe POJO (Plain Old Java Objects) corrispondente alla tabella. Questa classe descrive gli oggetti che "modelleranno" le righe della tabella del database.

La classe POJO avrebbe l'implementazione per tutti i metodi richiesti per eseguire le operazioni desiderate.

Supponiamo di avere la seguente tabella EMPLOYEE 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)
);

Classe POJO dipendente

Creeremo una classe Employee nel file Employee.java come segue:

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;
   }
} /* End of Employee */

È possibile definire metodi per impostare singoli campi nella tabella. Il capitolo successivo spiega come ottenere i valori dei singoli campi.

File Employee.xml

Per definire l'istruzione di mappatura SQL utilizzando iBATIS, utilizzeremo il tag <inserire> e all'interno di questa definizione di tag, definiremo un "id" che verrà utilizzato nel file IbatisInsert.java per eseguire la query SQL INSERT sul database.

<?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"> 

   <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> 

</sqlMap>

Qui parameterClass −potrebbe assumere un valore come stringa, int, float, double o qualsiasi oggetto di classe basato sui requisiti. In questo esempio, avremmo pass oggetto Impiegato come parametro mentre chiama inserto metodo di classe SqlMap.

Se la tabella del database utilizza una colonna IDENTITY, AUTO_INCREMENT o SERIAL o se è stata definita una SEQUENCE / GENERATOR, è possibile utilizzare l'elemento <selectKey> in un'istruzione <inserire> per utilizzare o restituire quel valore generato dal database.

File IbatisInsert.java

Questo file avrebbe una logica a livello di applicazione per inserire record nella tabella Employee -

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 IbatisInsert{
   public static void main(String[] args)throws IOException,SQLException{
      Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
      SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);

      /* This would insert one record in Employee table. */
      System.out.println("Going to insert record.....");
      Employee em = new Employee("Zara", "Ali", 5000);

      smc.insert("Employee.insert", em);

      System.out.println("Record Inserted Successfully ");
   }
}

Compilazione ed esecuzione

Ecco i passaggi per compilare ed eseguire il software sopra menzionato. Assicurati di aver impostato PATH e CLASSPATH in modo appropriato prima di procedere con la compilazione e l'esecuzione.

  • Crea Employee.xml come mostrato sopra.
  • Crea Employee.java come mostrato sopra e compilarlo.
  • Crea IbatisInsert.java come mostrato sopra e compilarlo.
  • Eseguire il binario IbatisInsert per eseguire il programma.

Si otterrebbe il seguente risultato e verrà creato un record nella tabella EMPLOYEE.

$java IbatisInsert
Going to insert record.....
Record Inserted Successfully

Se controlli la tabella EMPLOYEE, dovrebbe visualizzare il seguente risultato:

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