iBATIS - Hoạt động cập nhật
Chúng ta đã thảo luận, trong chương trước, cách thực hiện thao tác ĐỌC trên bảng bằng iBATIS. Chương này giải thích cách bạn có thể cập nhật bản ghi trong 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 udpate, bạn cần sửa đổi 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;
}
/* 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 */
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ẻ <update> trong 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 IbatisUpdate.java để thực hiện truy vấn SQL UPDATE 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>
<update id="update" parameterClass="Employee">
UPDATE EMPLOYEE
SET first_name = #first_name#
WHERE id = #id#
</update>
</sqlMap>
Tệp IbatisUpdate.java
Tệp này có logic mức ứng dụng để cập nhật bản ghi vào 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 IbatisUpdate{
public static void main(String[] args)
throws IOException,SQLException{
Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
/* This would update one record in Employee table. */
System.out.println("Going to update record.....");
Employee rec = new Employee();
rec.setId(1);
rec.setFirstName( "Roma");
smc.update("Employee.update", rec );
System.out.println("Record updated Successfully ");
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 IbatisUpdate.java như hình trên và biên dịch nó.
- Thực thi nhị phân IbatisUpdate để 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ập nhật trong bảng EMPLOYEE và sau đó, bản ghi tương tự sẽ được đọc từ bảng EMPLOYEE.
Going to update record.....
Record updated Successfully
Going to read records.....
1 Roma Ali 5000
Records Read Successfully