iBATIS - Создание операции
Чтобы выполнить любую операцию создания, чтения, обновления и удаления (CRUD) с помощью iBATIS, вам необходимо создать класс простых старых объектов Java (POJO), соответствующий таблице. Этот класс описывает объекты, которые будут «моделировать» строки таблицы базы данных.
Класс POJO будет иметь реализацию для всех методов, необходимых для выполнения желаемых операций.
Предположим, у нас есть следующая таблица EMPLOYEE в 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)
);
Сотрудник класса POJO
Мы бы создали класс Employee в файле 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;
}
} /* End of Employee */
Вы можете определить методы для установки отдельных полей в таблице. В следующей главе объясняется, как получить значения отдельных полей.
Файл Employee.xml
Чтобы определить оператор сопоставления SQL с помощью iBATIS, мы должны использовать тег <insert>, а внутри этого определения тега мы должны определить «id», который будет использоваться в файле IbatisInsert.java для выполнения запроса SQL INSERT в базе данных.
<?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>
</sqlMap>
Вот parameterClass −может принимать значение как строку, int, float, double или любой объект класса в зависимости от требований. В этом примере, мы бы передать объект Employee в качестве параметра при вызове вставки метод класса SqlMap.
Если в вашей таблице базы данных используется столбец IDENTITY, AUTO_INCREMENT или SERIAL или вы определили SEQUENCE / GENERATOR, вы можете использовать элемент <selectKey> в операторе <insert> для использования или возврата этого значения, созданного базой данных.
Файл IbatisInsert.java
Этот файл будет иметь логику уровня приложения для вставки записей в таблицу сотрудников -
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 IbatisInsert{
public static void main(String[] args)throws IOException,SQLException{
Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
/* This would insert one record in Employee table. */
System.out.println("Going to insert record.....");
Employee em = new Employee("Zara", "Ali", 5000);
smc.insert("Employee.insert", em);
System.out.println("Record Inserted Successfully ");
}
}
Компиляция и запуск
Вот шаги для компиляции и запуска вышеупомянутого программного обеспечения. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем продолжить компиляцию и выполнение.
- Создайте Employee.xml, как показано выше.
- Создайте Employee.java, как показано выше, и скомпилируйте его.
- Создайте IbatisInsert.java, как показано выше, и скомпилируйте его.
- Запустите двоичный файл IbatisInsert, чтобы запустить программу.
Вы получите следующий результат, и в таблице EMPLOYEE будет создана запись.
$java IbatisInsert
Going to insert record.....
Record Inserted Successfully
Если вы проверите таблицу EMPLOYEE, она должна отобразить следующий результат -
mysql> select * from EMPLOYEE;
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 1 | Zara | Ali | 5000 |
+----+------------+-----------+--------+
1 row in set (0.00 sec)