iBatis是像Hibernate, JDO和EJB一样的数据持久框架,它将对象映射为SQL语句.它是个轻量级的框架并且持久性API适合持久化POJO.iBatis也与Hibernate, JDO不同,因为它使用存储过程和现有的SQL来处理数据库.

本节我们将向你讲述如何配置iBatis来运行一个小型程序.既然一次性将所有知识全部解释很难,我们索性把本教程分为几个单独的例子来陈述.该例是关于如何从数据库读取数据并将结果显示在你的命令提示符上.在第二个例子中你将会到如何添加更多的数据到数据库中,在此之后的第三个例子将会向你展示如何通过iBatis从记录中删除数据.

现在的第一个例子将会向你展示如何从数据库中读取记录,我们需要一个数据库来执行查询,所以我们使用MySQL5.0作为这个例子的数据库.

这里我们将要检索一些人的contact的信息, contact的表结构给出如下 :


DROP TABLE IF EXISTS `contact`;
 
  
CREATE TABLE `contact` (
 
  
       `id` int(11) NOT NULL auto_increment,
 
  
       `firstName` varchar(20) default NULL,
 
  
       `lastName` varchar(20) default NULL,
 
  
       `email` varchar(20) default NULL,
 
  
       PRIMARY KEY (`id`)
 
  
);


根据Contact表我们需要创建一个POJO类,在我们的例子中,数据库vin有一个表Contact,包括四个字段 :

  • id
  • firstName
  • lastName
  • email
Contact.java
 
 
public class Contact {

 
  
  private String firstName;
 
  
  private String lastName;  
 
  
  private String email; 
 
  
  private int id;
 
  
 
 
  
  public Contact() {}
 
  
 
 
  
  public Contact(
 
  
    String firstName,
 
  
    String lastName,
 
  
    String email) {

 
  
    this.firstName = firstName;
 
  
    this.lastName = lastName;
 
  
    this.email = email;
 
  
    }
 
  
 
 
  
  public String getEmail() {

 
  
    return email;
 
  
  }
 
  
  public void setEmail(String email) {

 
  
    this.email = email;
 
  
  }
 
  
  public String getFirstName() {

 
  
    return firstName;
 
  
  }
 
  
 public void setFirstName(String firstName) {

 
  
    this.firstName = firstName;
 
  
  }
 
  
  public int getId() {

 
  
    return id;
 
  
  }
 
  
  public void setId(int id) {

 
  
    this.id = id;
 
  
  }
 
  
  public String getLastName() {

 
  
    return lastName;
 
  
  }
 
  
  public void setLastName(String lastName) {

 
  
    this.lastName = lastName;
 
  
  }
 
  
}



为了映射配置我们需要创建SqlMapConfig.xml来指定如下信息 :

Ÿ           针对映射语句的命名空间前缀

Ÿ           我们的数据库将使用JDBC来进行访问

Ÿ           针对MySQL的JDBC驱动为" com.mysql.jdbc.Driver"

Ÿ           连接URL为"jdbc:mysql://192.168.10.112:3306/vin"

Ÿ           用户名与密码分别为"root"和"root"

Ÿ           我们的SQL语句描述在"Contact.xml"

SqlMapConfig.xml



<?xml version="1.0" encoding="UTF-8"?>
 
  
<!DOCTYPE sqlMapConfig
 
  
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
 
  
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 
  
 
 
  
<sqlMapConfig>
 
  
   <settings useStatementNamespaces="true"/>
 
  
     <transactionManager type="JDBC">
 
  
        <dataSource type="SIMPLE">
 
  
          <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
 
  
          <property name="JDBC.ConnectionURL"
 
  
               value="jdbc:mysql://192.168.10.112:3306/vin"/>
 
  
          <property name="JDBC.Username" value="root"/>
 
  
          <property name="JDBC.Password" value="root"/>
 
  
        </dataSource>
 
  
      </transactionManager>
 
  
     <sqlMap resource="Contact.xml"/>
 
  
</sqlMapConfig>



 

映射文件在下面给出,它主要为我们的程序负责执行SQL查询. Contact.xml的代码如下 :



<?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="Contact">
 
  
<!--- Showing all data of table -->
 
  
<select id="getAll" resultClass="Contact">
 
  
          select * from contact
 
  
</select>
 
  
</sqlMap>



现在为了显示数据库中的数据我们需要创建一个类----IbatisExample,它从SqlMapConfig.xml中读取配置并在你的控制台输出所有数据.IbatisExample.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 IbatisExample{

 
  
  public static void main(String[] args)
 
  
    throws IOException,SQLException{

 
  
    Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
 
  
      SqlMapClient sqlMap =
 
  
      SqlMapClientBuilder.buildSqlMapClient(reader);
 
  
      //Output all contacts
 
  
      System.out.println("All Contacts");
 
  
      List<Contact> contacts = (List<Contact>)
 
  
        sqlMap.queryForList("Contact.getAll",null);
 
  
        Contact contact = null;
 
  
      for (Contact c : contacts) {

 
  
      System.out.print("  " + c.getId());
 
  
      System.out.print("  " + c.getFirstName());
 
  
      System.out.print("  " + c.getLastName());
 
  
      System.out.print("  " + c.getEmail());
 
  
        contact = c;
 
  
      System.out.println("");
 
  
      }   
 
  
  }
 
  
}



 

为了运行该例,你需要遵循如下步骤 :

Ÿ           在你的MySQL数据库中创建表Contact

Ÿ           下载iBatis的JAR文件(ibatis-common-2.jar,ibatis-dao-2.jar,ibatis-sqlmap-2.jar),并将其放置在你的lib目录中

Ÿ           设置类路径

Ÿ           创建Contact.java将其编译

Ÿ           创建Contact.java

Ÿ           创建SqlMapConfig.xml

Ÿ           创建IbatisExample.java并将其编译

Ÿ           执行IbatisExample文件

输出 :

你的命令提示符应该有像这样的输出 :