鍍金池/ 教程/ Java/ iBATIS動態(tài)SQL
iBATIS和Hibernate區(qū)別
iBATIS刪除操作
iBATIS存儲過程
iBATIS讀取操作
iBATOR介紹,什么是iBATOR?
iBATIS創(chuàng)建操作
ibatis
iBATIS調試
iBATIS配置環(huán)境
iBATIS結果映射
iBATIS動態(tài)SQL
iBATIS介紹,iBATIS是什么?
iBATIS更新操作

iBATIS動態(tài)SQL

使用動態(tài)查詢是iBatis一個非常強大的功能。有時你已經改變WHERE子句條件的基礎上你的參數(shù)對象的狀態(tài)。在這種情況下的iBATIS提供了一組可以映射語句中使用,以提高SQL語句的重用性和靈活性的動態(tài)SQL標簽。

所有的邏輯是使用一些額外的標簽放在:XML文件。下面是一個例子,其中的SELECT語句將努力在兩個方面:

  • 如果想傳遞一個ID,然后它會返回所有與該ID的記錄,

  • 否則,將返回所有雇員ID為NULL的記錄。

<?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">
<select id="findByID" resultClass="Employee">
   SELECT * FROM EMPLOYEE
   <dynamic prepend="WHERE ">
      <isNull property="id">
         id IS NULL
      </isNull>
      <isNotNull property="id">
         id = #id#
      </isNotNull>
   </dynamic>
</select>
</sqlMap>

可以使用<isNotEmpty>標簽如下檢查條件。在此條件下將增加,只有當通過屬性不為空。

..................
<select id="findByID" resultClass="Employee">
   SELECT * FROM EMPLOYEE
   <dynamic prepend="WHERE ">
      <isNotEmpty property="id">
           id = #id#
      </isNotEmpty>
   </dynamic>
</select>
..................

如果想查詢對id和/或雇員的名字選取。SELECT語句如下:

..................
<select id="findByID" resultClass="Employee">
   SELECT * FROM EMPLOYEE
   <dynamic prepend="WHERE ">
      <isNotEmpty prepend="AND" property="id">
           id = #id#
      </isNotEmpty>
      <isNotEmpty prepend="OR" property="first_name">
           first_name = #first_name#
      </isNotEmpty>
   </dynamic>
</select>
..................

例如:動態(tài)SQL

下面的例子將展示如何編寫SELECT語句中使用動態(tài)SQL??紤],我們已經在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 |
|  3 | Noha       | Ali       |   7000 |
+----+------------+-----------+--------+
3 row in set (0.00 sec)

Employee POJO 類:

要執(zhí)行讀取操作,讓我們在Employee.java文件Employee類,如下所示:

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 method definitions */
  public int getId() {
    return id;
  }
  pu