iBATIS - Tạo hoạt động

Để thực hiện bất kỳ thao tác Tạo, Đọc, Cập nhật và Xóa (CRUD) nào bằng iBATIS, bạn cần tạo một lớp Đối tượng Java Cũ (POJO) tương ứng với bảng. Lớp này mô tả các đối tượng sẽ "mô hình hóa" các hàng của bảng cơ sở dữ liệu.

Lớp POJO sẽ có triển khai cho tất cả các phương thức cần thiết để thực hiện các hoạt động mong muốn.

Giả sử chúng ta có bảng NHÂN VIÊN sau trong 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)
);

Lớp POJO nhân viên

Chúng tôi sẽ tạo một lớp Employee trong tệp Employee.java như sau:

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

Bạn có thể xác định các phương pháp để đặt các trường riêng lẻ trong bảng. Chương tiếp theo giải thích cách lấy giá trị của các trường riêng lẻ.

Tệp Employee.xml

Để xác định câu lệnh ánh xạ SQL bằng iBATIS, chúng tôi sẽ sử dụng thẻ <insert> và bên trong định nghĩa thẻ này, chúng tôi sẽ xác định một "id" sẽ được sử dụng trong tệp IbatisInsert.java để thực hiện truy vấn SQL INSERT trên cơ sở dữ liệu.

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

Đây parameterClass −có thể nhận một giá trị dưới dạng chuỗi, int, float, double hoặc bất kỳ đối tượng lớp nào dựa trên yêu cầu. Trong ví dụ này, chúng ta sẽ truyền đối tượng Employee như một tham số trong khi gọi phương thức insert của lớp SqlMap.

Nếu bảng cơ sở dữ liệu của bạn sử dụng cột IDENTITY, AUTO_INCREMENT hoặc SERIAL hoặc bạn đã xác định SEQUENCE / GENERATOR, bạn có thể sử dụng phần tử <selectKey> trong câu lệnh <insert> để sử dụng hoặc trả về giá trị do cơ sở dữ liệu tạo ra.

Tệp IbatisInsert.java

Tệp này sẽ có logic mức ứng dụng để chèn các bản ghi trong bảng Nhân viên -

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

Biên dịch và Chạy

Dưới đây là các bước để biên dịch và chạy phần mềm nói trên. Đảm bảo rằng bạn đã đặt PATH và CLASSPATH thích hợp trước khi tiến hành biên dịch và thực thi.

  • Tạo Employee.xml như hình trên.
  • Tạo Employee.java như hình trên và biên dịch nó.
  • Tạo IbatisInsert.java như hình trên và biên dịch nó.
  • Thực thi IbatisInsert nhị phân để chạy chương trình.

Bạn sẽ nhận được kết quả sau và một bản ghi sẽ được tạo trong bảng NHÂN VIÊN.

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

Nếu bạn kiểm tra bảng EMPLOYEE, nó sẽ hiển thị kết quả sau:

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