resultMap元素是iBATIS中最重要和最强大的元素.您可以使用iBATIS ResultMap减少高达90%的JDBC编码,在某些情况下,它允许您执行JDBC甚至不支持的操作.
ResultMaps的设计就是这样简单的语句根本不需要显式的结果映射,更复杂的语句只需要描述关系的绝对必要.
本章仅提供iBATIS ResultMaps的简单介绍.
我们在MySQL中有以下EMPLOYEE表 :
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));
此表有两条记录,如下 :
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)
员工POJO类
要使用iBATIS ResultMap,您无需修改Employee.java文件.让我们保持原样在最后一章.
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 */
Employee.xml文件
在这里,我们将修改Employee.xml以引入< resultMap>标签.此标记将具有在我们的< select>中运行此resultMap所需的id. tag的resultMap属性.
INSERT INTO EMPLOYEE(first_name, last_name, salary) values (#first_name#, #last_name#, #salary#) select last_insert_id() as id UPDATE EMPLOYEE SET first_name = #first_name# WHERE id = #id# DELETE FROM EMPLOYEE WHERE id = #id#
IbatisResultMap.java文件
此文件具有应用程序级逻辑,可使用ResultMap&minus读取Employee表中的记录;
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 "); } }
编译并运行
以下是编译和运行的步骤上述软件.在继续进行编译和执行之前,请确保已正确设置PATH和CLASSPATH.
如上所示创建Employee.xml.
如上所示创建Employee.java并进行编译.
如上所示创建IbatisResultMap.java并进行编译.
执行IbatisResultMap二进制文件以运行程序.
您将获得以下结果,这是EMPLOYEE表上的读取操作.
Going to read record.....ID: 1First Name: ZaraLast Name: AliSalary: 5000Record read Successfully