iBATIS - Thao tác đọc

Trong chương trước, chúng ta đã thảo luận về cách thực hiện thao tác CREATE trên bảng bằng iBATIS. Chương này giải thích cách đọc bảng bằng iBATIS.

Chúng tôi có bảng EMPLOYEE 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)
);

Bảng này chỉ có một bản ghi như sau:

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

Lớp POJO nhân viên

Để thực hiện thao tác đọc, chúng tôi sẽ sửa đổi lớp Nhân viên trong 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;
   }

   /* Here are the method definitions */
   public int getId() {
      return id;
   }
	
   public String getFirstName() {
      return first_name;
   }
	
   public String getLastName() {
      return last_name;
   }
	
   public int getSalary() {
      return salary;
   }
	
} /* End of Employee */

Tệp Employee.xml

Để xác định câu lệnh ánh xạ SQL bằng iBATIS, chúng tôi sẽ thêm thẻ <select> trong tệp Employee.xml 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 IbatisRead.java để thực hiện truy vấn SQL SELECT 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>
	
   <select id="getAll" resultClass="Employee">
      SELECT * FROM EMPLOYEE
   </select>
	
</sqlMap>

Ở đây chúng tôi không sử dụng mệnh đề WHERE với câu lệnh SQL SELECT. Trong chương tiếp theo, chúng tôi sẽ trình bày cách bạn có thể sử dụng mệnh đề WHERE với câu lệnh SELECT và cách bạn có thể chuyển các giá trị cho mệnh đề WHERE đó.

Tệp IbatisRead.java

Tệp này có logic mức ứng dụng để đọc các bản ghi từ 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 IbatisRead{
   public static void main(String[] args)throws IOException,SQLException{
      Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
      SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);

      /* This would read all records from the Employee table. */
      System.out.println("Going to read records.....");
      List <Employee> ems = (List<Employee>)
         smc.queryForList("Employee.getAll", null);
      Employee em = null;
		
      for (Employee e : ems) {
         System.out.print("  " + e.getId());
         System.out.print("  " + e.getFirstName());
         System.out.print("  " + e.getLastName());
         System.out.print("  " + e.getSalary());
         em = e; 
         System.out.println("");
      }    
		
      System.out.println("Records Read 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 IbatisRead.java như hình trên và biên dịch nó.
  • Thực thi IbatisRead 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 đọc từ bảng EMPLOYEE như sau:

Going to read records.....
   1  Zara  Ali  5000
Record Reads Successfully