iBATIS - Crear operación

Para realizar cualquier operación de creación, lectura, actualización y eliminación (CRUD) mediante iBATIS, deberá crear una clase de objetos Java antiguos simples (POJO) correspondiente a la tabla. Esta clase describe los objetos que "modelarán" las filas de la tabla de la base de datos.

La clase POJO tendría implementación para todos los métodos necesarios para realizar las operaciones deseadas.

Supongamos que tenemos la siguiente tabla EMPLOYEE en 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)
);

Clase POJO para empleados

Creamos una clase de empleado en el archivo Employee.java de la siguiente manera:

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

Puede definir métodos para establecer campos individuales en la tabla. El siguiente capítulo explica cómo obtener los valores de campos individuales.

Archivo Employee.xml

Para definir la declaración de mapeo SQL usando iBATIS, usaríamos la etiqueta <insertar> y dentro de esta definición de etiqueta, definiríamos un "id" que se usará en el archivo IbatisInsert.java para ejecutar la consulta SQL INSERT en la base de datos.

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

aquí parameterClass −podría tomar un valor como string, int, float, double o cualquier objeto de clase según el requisito. En este ejemplo, pasaríamos el objeto Employee como parámetro mientras llamamos al método insert de la clase SqlMap.

Si la tabla de la base de datos utiliza una columna IDENTITY, AUTO_INCREMENT o SERIAL o ha definido una SECUENCIA / GENERADOR, puede utilizar el elemento <selectKey> en una sentencia <insertar> para utilizar o devolver ese valor generado por la base de datos.

Archivo IbatisInsert.java

Este archivo tendría lógica a nivel de aplicación para insertar registros en la tabla Empleado:

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 ");
   }
}

Compilación y ejecución

Estos son los pasos para compilar y ejecutar el software mencionado anteriormente. Asegúrese de haber configurado PATH y CLASSPATH correctamente antes de proceder con la compilación y ejecución.

  • Cree Employee.xml como se muestra arriba.
  • Cree Employee.java como se muestra arriba y compílelo.
  • Cree IbatisInsert.java como se muestra arriba y compílelo.
  • Ejecute IbatisInsert binary para ejecutar el programa.

Obtendría el siguiente resultado y se crearía un registro en la tabla EMPLOYEE.

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

Si marca la tabla EMPLEADO, debería mostrar el siguiente resultado:

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