iBATIS - Sonuç Haritaları

ResultMap öğesi, iBATIS'teki en önemli ve güçlü unsurdur. İBATIS ResultMap kullanarak JDBC kodlamasını% 90'a kadar azaltabilirsiniz ve bazı durumlarda, JDBC'nin desteklemediği şeyleri bile yapmanıza izin verir.

ResultMaps'in tasarımı, basit ifadelerin hiçbir şekilde açık sonuç eşlemeleri gerektirmediği ve daha karmaşık ifadelerin ilişkileri tanımlamak için kesinlikle gerekenden fazlasını gerektirmediği şekildedir.

Bu bölüm, iBATIS Sonuç Haritalarına yalnızca basit bir giriş sağlar.

MySQL'de aşağıdaki EMPLOYEE tablosuna sahibiz -

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

Bu tablonun aşağıdaki gibi iki kaydı vardır -

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)

Çalışan POJO Sınıfı

İBATIS ResultMap'i kullanmak için Employee.java dosyasını değiştirmenize gerek yoktur. Son bölümde olduğu gibi tutalım.

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 Dosyası

Burada Employee.xml'yi <resultMap> </resultMap> etiketini tanıtacak şekilde değiştirirdik. Bu etiketin, <select> etiketinin resultMap özniteliğinde bu resultMap'i çalıştırmak için gerekli bir kimliği olacaktır.

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

IbatisResultMap.java Dosyası

Bu dosya, ResultMap kullanarak Çalışan tablosundaki kayıtları okumak için uygulama düzeyinde mantığa sahiptir -

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

Derleme ve Çalıştırma

Yukarıda bahsedilen yazılımı derlemek ve çalıştırmak için adımlar aşağıda verilmiştir. Derleme ve yürütme için ilerlemeden önce PATH ve CLASSPATH'ı uygun şekilde ayarladığınızdan emin olun.

  • Employee.xml'yi yukarıda gösterildiği gibi oluşturun.
  • Employee.java'yı yukarıda gösterildiği gibi oluşturun ve derleyin.
  • IbatisResultMap.java'yı yukarıda gösterildiği gibi oluşturun ve derleyin.
  • Programı çalıştırmak için IbatisResultMap ikili dosyasını çalıştırın.

EMPLOYEE tablosunda bir okuma işlemi olan aşağıdaki sonucu alırsınız.

Going to read record.....
ID:  1
First Name:  Zara
Last Name:  Ali
Salary:  5000
Record read Successfully