iBATIS - Bản đồ kết quả
Phần tử resultMap là phần tử quan trọng và mạnh mẽ nhất trong iBATIS. Bạn có thể giảm tới 90% mã hóa JDBC bằng cách sử dụng iBATIS ResultMap và trong một số trường hợp, nó cho phép bạn thực hiện những điều mà JDBC thậm chí không hỗ trợ.
Thiết kế của Bản đồ kết quả sao cho các câu lệnh đơn giản không yêu cầu ánh xạ kết quả rõ ràng, và các câu lệnh phức tạp hơn không yêu cầu nhiều hơn mức thực sự cần thiết để mô tả các mối quan hệ.
Chương này chỉ cung cấp một giới thiệu đơn giản về Sơ đồ kết quả 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 có hai bản ghi như sau:
mysql> select * from EMPLOYEE;
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 1 | Zara | Ali | 5000 |
| 2 | Roma | Ali | 3000 |
+----+------------+-----------+--------+
2 row in set (0.00 sec)
Lớp POJO nhân viên
Để sử dụng iBATIS ResultMap, bạn không cần phải sửa đổi tệp Employee.java. Hãy để chúng tôi giữ nó như nó đã được trong chương trước.
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
Ở đây, chúng tôi sẽ sửa đổi Employee.xml để giới thiệu thẻ <resultMap> </resultMap>. Thẻ này sẽ có một id cần thiết để chạy Bản đồ kết quả này trong thuộc tính Bản đồ kết quả của thẻ <select> của chúng tôi.
<?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">
<!-- Perform Insert Operation -->
<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>
<!-- Perform Read Operation -->
<select id="getAll" resultClass="Employee">
SELECT * FROM EMPLOYEE
</select>
<!-- Perform Update Operation -->
<update id="update" parameterClass="Employee">
UPDATE EMPLOYEE
SET first_name = #first_name#
WHERE id = #id#
</update>
<!-- Perform Delete Operation -->
<delete id="delete" parameterClass="int">
DELETE FROM EMPLOYEE
WHERE id = #id#
</delete>
<!-- Using ResultMap -->
<resultMap id="result" class="Employee">
<result property="id" column="id"/>
<result property="first_name" column="first_name"/>
<result property="last_name" column="last_name"/>
<result property="salary" column="salary"/>
</resultMap>
<select id="useResultMap" resultMap="result">
SELECT * FROM EMPLOYEE
WHERE id=#id#
</select>
</sqlMap>
Tệp IbatisResultMap.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 bằng Bản đồ Kết quả -
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 IbatisResultMap{
public static void main(String[] args)
throws IOException,SQLException{
Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
int id = 1;
System.out.println("Going to read record.....");
Employee e = (Employee)smc.queryForObject ("Employee.useResultMap", id);
System.out.println("ID: " + e.getId());
System.out.println("First Name: " + e.getFirstName());
System.out.println("Last Name: " + e.getLastName());
System.out.println("Salary: " + e.getSalary());
System.out.println("Record 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 IbatisResultMap.java như hình trên và biên dịch nó.
- Thực thi nhị phân IbatisResultMap để chạy chương trình.
Bạn sẽ nhận được kết quả sau đây là một thao tác đọc trên bảng EMPLOYEE.
Going to read record.....
ID: 1
First Name: Zara
Last Name: Ali
Salary: 5000
Record read Successfully