iBatis入门

来源:互联网 发布:网络创世纪 中国 编辑:程序博客网 时间:2024/05/01 04:17

最近这些天在学习Struts2,学习效果还好,而且最近也在打算做个有实际价值的东西出来,并且把Struts2也用上,考虑之余,我想到了持久层的问题,以前用过Hibernate,对它好像不是很感冒,以前也亲自做过对JDBC封装来完成持久层的功能,总是感觉亲自封装JDBC比用Hibernate更爽,更灵活多了。本来打算用这次也亲自封装,因为毕竟系统只是小型的。突然这时想起了以前在网上看过的iBatis,听说它用起来很灵活,不像Hibernate那么“全自动化”,而属于“半自动化”,是要自己编写SQL语句的那种。所以就GOOGLE一下,下载了IBATIS的开发包和一些中文资料。然后马上做一个DEMO。

其实做完后,我发现IBATIS不难,蛮容易入门,如果有本很好的中文书籍在的话,一二天掌握个基本一点问题都没有,完全可以马上应用到实际开发中去。

        在用IBATIS时,我们只要建四五类文件:

        1、IBATIS配制文件(如:sqlMapConfig.xml)

        2、IBATIS映射文件(如:Admin.xml)

        3、POJO类

        4、产生SqlMapClient对像的单例类

        5、(可选)配数据库的属性文件

 

如下为刚才做的一个DEMO,贴上来记念下:

IBATIS配制文件sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE sqlMapConfig      
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
  4.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
  5. <sqlMapConfig>
  6.   <!-- Configure a built-in transaction manager.  If you're using an 
  7.        app server, you probably want to use its transaction manager 
  8.        and a managed datasource -->
  9.   <transactionManager type="JDBC">
  10.     <dataSource type="SIMPLE">
  11.       <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
  12.       <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/yes"/>
  13.       <property name="JDBC.Username" value="root"/>
  14.       <property name="JDBC.Password" value="root"/>
  15.     </dataSource>
  16.   </transactionManager>
  17.   <!-- List the SQL Map XML files. They can be loaded from the 
  18.        classpath, as they are here (com.domain.data...) -->
  19.   <sqlMap resource="Admin.xml"/>
  20.   <!-- List more here...
  21.   <sqlMap resource="com/mydomain/data/Order.xml"/>
  22.   <sqlMap resource="com/mydomain/data/Documents.xml"/>
  23.   -->
  24. </sqlMapConfig>

       IBATIS映射文件 Admin.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE sqlMap      
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  5. <sqlMap namespace="Admin">  
  6.   <typeAlias alias="Admin" type="Admin"/>   
  7.   <select id="getAdmin"  resultClass="Admin">
  8.     select
  9.       name,
  10.       password,
  11.       last_logon as lastLogon,
  12.       role,
  13.       locked
  14.       from admin
  15.     where name = #name#
  16.   </select>
  17. </sqlMap>

        POJO类 Admin.java

  1. import java.util.Date;
  2. public class Admin {
  3.     private String name;
  4.     private String password;
  5.     private Date lastLogon;
  6.     private String role;
  7.     private int locked;
  8.     public int getLocked() {
  9.         return locked;
  10.     }
  11.     public void setLocked(int locked) {
  12.         this.locked = locked;
  13.     }
  14.     
  15.     public Date getLastLogon() {
  16.         return lastLogon;
  17.     }
  18.     public void setLastLogon(Date lastLogon) {
  19.         this.lastLogon = lastLogon;
  20.     }
  21.     public String getName() {
  22.         return name;
  23.     }
  24.     public void setName(String name) {
  25.         this.name = name;
  26.     }
  27.     public String getPassword() {
  28.         return password;
  29.     }
  30.     public void setPassword(String password) {
  31.         this.password = password;
  32.     }
  33.     public String getRole() {
  34.         return role;
  35.     }
  36.     public void setRole(String role) {
  37.         this.role = role;
  38.     }
  39. }

        产生SqlMapClient对像的单例类

  1. import java.io.Reader;
  2. import com.ibatis.common.resources.Resources;
  3. import com.ibatis.sqlmap.client.SqlMapClient;
  4. import com.ibatis.sqlmap.client.SqlMapClientBuilder;
  5. public class SqlMapFactory {
  6.     private static SqlMapClient sqlMap;
  7.     static 
  8.     {
  9.         try{
  10.             String resource="sqlMapConfig.xml";
  11.             Reader reader=Resources.getResourceAsReader(resource);
  12.             sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);
  13.         }catch(Exception e){
  14.             System.out.println(e);
  15.         }
  16.     }
  17.     public static SqlMapClient getSqlMapClient(){
  18.         return sqlMap;
  19.     }
  20. }

    Test.java

  1. import java.sql.SQLException;
  2. import com.ibatis.sqlmap.client.SqlMapClient;
  3. public class Test {
  4.     public static void main(String [] args){
  5.         SqlMapClient sqlMap=SqlMapFactory.getSqlMapClient();
  6.         Admin admin;
  7.         try {
  8.             admin=(Admin)sqlMap.queryForObject("getAdmin""admin");
  9.             System.out.println(admin.getName());
  10.             System.out.println(admin.getPassword());
  11.         } catch (SQLException e) {
  12.             // TODO Auto-generated catch block
  13.             e.printStackTrace();
  14.         }
  15.         
  16.     }
  17. }

        总体来说,IBATIS给我的感觉很好。