ibatis入门

最简单的 iBatis 入门例子       

iBatis 是一个 O/R Mapping 解决方案, iBatis 最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能, iBatis 是能满足你的要求又足够灵活的最简单的解决方案。下面我们看一个最简单的入门例子,是《 ibatis 开发指南》上的例子改的,不过上面讲的不仔细,我开始学的时候搞了一个晚上才把那个例子跑起来的,相信一些朋友也和我一样,在入门的时候有一点小郁闷,我把整个工程项目打包了供朋友 下载 ,工具是 eclipse3.2+myeclipse5.0 ,导入即可运行,数据库用的是 MySQL 。也可以改用别的数据库!  

先建数据库和表吧; sql 语句我导出来了:

  /*  

SQLyog 企业版 - MySQL GUI v4.1 

主机 - 5.0.7-beta-nt : 数据库 - sample 

********************************************************************* 

服务器版本 : 5.0.7-beta-nt 

create database if not exists `sample`; 

USE `sample`; 

/* 数据表 `t_user` 的表结构
 */ 
 

  drop    table    if    exists   `t_user`; 

  CREATE    TABLE   `t_user` ( 

  `id` 
  int   (  11    NOT    NULL   auto_increment, 

  `name` 
  varchar   (  50    default    NULL   , 

  `sex` 
  int   (  11    default    NULL   , 

  
  PRIMARY    KEY     (`id`) 

) ENGINE
  =  InnoDB   DEFAULT   CHARSET  =  latin1; 

  /*  数据表 `t_user` 的数据 */   

  insert    into   `t_user`   values   (  1    '  zhupan  '   ,  1  ),(  2    '  zhupan  '   ,  2  ),(  3    '  3  '   ,  3  ),(  4    '  4  '   ,  4  ),(  5    '  5  '   ,  5  ); 


整个工程目录结构如下:  (图片未能显示,附件里面有)

lib 包下面的文件:  (图片未能显示,附件里面有)

下面开始编写每个文件:  

编写 iBatis 必须的配置文件 SqlMapConfig.xml ,放在包 com.ctgusec.zhupan.maps 下,文件名可以任意改,内容如下: 

  <?   xml version = "1.0" encoding = "UTF-8"   ?>   

  <!   DOCTYPE sqlMapConfig 

    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 

    "http://www.ibatis.com/dtd/sql-map-config-2.dtd" 
  >   

  <   sqlMapConfig   >   

    
  <   settings   cacheModelsEnabled   = "true"   enhancementEnabled   = "true"   

        lazyLoadingEnabled 
  = "true"   errorTracingEnabled   = "true"   maxRequests   = "32"   

        maxSessions 
  = "10"   maxTransactions   = "5"   useStatementNamespaces   = "false"    />   

  

    
  <   transactionManager   type   = "JDBC"    >   

        
  <   dataSource   type   = "SIMPLE"    >   

            
  <  property   name  ="JDBC.Driver"   value  ="com.mysql.jdbc.Driver"    />   

           
  <  property   name  ="JDBC.ConnectionURL"      value  ="jdbc:mysql://localhost/sample"    />   

           
  <  property   name  ="JDBC.Username"   value  ="root"    />   

           
  <  property   name  ="JDBC.Password"   value  =""    />   

            
  <   property   name   = "Pool.MaximumActiveConnections"   value   = "10"    />   

            
  <   property   name   = "Pool.MaximumIdleConnections"   value   = "5"    />   

            
  <   property   name   = "Pool.MaximumCheckoutTime"   value   = "120000"    />   

            
  <   property   name   = "Pool.TimeToWait"   value   = "500"    />   

            
  <   property   name   = "Pool.PingQuery"   value   = "select 1 from sample"    />   

            
  <   property   name   = "Pool.PingEnabled"   value   = "false"    />   

            
  <   property   name   = "Pool.PingConnectionsOlderThan"   value   = "1"    />   

            
  <   property   name   = "Pool.PingConnectionsNotUsedFor"   value   = "1"    />   

        
  </   dataSource   >   

    
  </   transactionManager   >   

    
  <   sqlMap   resource   = "com/ctgusec/zhupan/maps/User.xml"    />   

  </   sqlMapConfig   >   

如果不用 mysql 数据库,需要重新配置数据源(红色加粗字体标出),更改相应的属性即可。 

然后注意到这个配置文件还引用了一个 User.xml  iBatis 把每个需要 O/R Mapping  Java 对象关联到一个 xml 配置文件,我们需要把 t_user 表映射到一个 User 类:

  package   com.ctgusec.zhupan.model; 

  import   java.io.Serializable; 

  

  public    class   User   implements   Serializable  

  

    
 /**  

      * 
 @author  zhupan 

      
 */ 
 

    
 private   static   final   long  serialVersionUID  =   1L 

  

    
 private  Integer id ; 

  

    
 private  String name ; 

  

    
 private  Integer sex ; 

    

    
 public  User()  

    }
 
 

  

    
 public  Integer getId()  

        
 return   this  . id ; 

    }
 
 

  

    
 public   void  setId(Integer id)  

        
 this  . id  =  id; 

    }
 
 

  

    
 public  String getName()  

        
 return   this  . name ; 

    }
 
 

  

    
 public   void  setName(String name)  

        
 this  . name  =  name; 

    }
 
 

  

    
 public  Integer getSex()  

        
 return   this  . sex ; 

    }
 
 

  

    
 public   void  setSex(Integer sex)  

        
 this  . sex  =  sex; 

    }
 
 

}
 
 


编写 User.xml 文件:

  <?   xml version = "1.0" encoding = "UTF-8"   ?>   

  

  <!   DOCTYPE sqlMap 

    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 

    "http://www.ibatis.com/dtd/sql-map-2.dtd" 
  >   

  

  <   sqlMap   namespace   = "User"    >   

  

    
  <   typeAlias   alias   = "user"   type   = "com.ctgusec.zhupan.model.User"    />   

    
  <   select   id   = "getUser"   parameterClass   = "java.lang.String"   

        resultClass 
  = "user"    >   

        
  <![CDATA[       select  name,  sex   from t_user   where name = #name#     ]]>   

    
  </   select   >   

    

    
  <   select   id   = "getAllUser"   resultClass   = "user"    >   

        
  <![CDATA[      select   name,  sex  from t_user    ]]>   

    
  </   select   >   

  

    
  <   update   id   = "updateUser"   parameterClass   = "user"    >   

        
  <![CDATA[      UPDATE t_user  SET name=#name#, sex=#sex# WHERE id = #id#   ]]>   

    
  </   update   >   

  

    
  <   insert   id   = "insertUser"   parameterClass   = "user"    >   

        INSERT INTO t_user ( name, sex) VALUES ( #name#, #sex# ) 
  </   insert   >   

  

    
  <   delete   id   = "deleteUser"   parameterClass   = "java.lang.String"    >   

        delete from t_user where id=#value# 

    
  </   delete   >   

  </   sqlMap   > 

通过 <insert>  <delete>  <update>  <select> 节点,分别定义了针对 TUser 对象的增删改查操作。在这些节点中,我们指定了对应的 SQL 语句: ID 指定了操作 ID,之后我们可以在代码中通过指定操作 id 来执行此节点所定义的操作,如: sqlMap.update("updateUser",user);   ID 设定使得在一个配置文件中定义两个同名节点成为可能(两个 update 节点,以不同 id 区分) parameterClass 指定     需的   类型  此例  update    com.ctgusec.zhupan.model .User 类型的对象作为参数,目标是将提供的 User 实例更新到数据库。 parameterClass="user" 中, user 为“ com.ctgusec.zhupan.model.User ”类的别名,别名可通过 typeAlias 节点指定,如示例配置文件中的: <typeAlias alias="user" type="com.ctgusec.zhupan.model.User"/>  #name# ”在运行期会由传入的 user 对象的 name 属性填充。 #sex# ”,将在运行期由传入的 user 对象的 sex 属性填充。“ #id# ”,将在运行期由传入的 user 对象的 id 属性填充。  

只要你会写 SQL ,就能非常容易地写出配置文件。 

最后便是如何使用 iBatis 实现 O/R 映射 , 测试给个例子: 

  package   com.ctgusec.zhupan;   

  import   java.sql.SQLException; 

  import   java.util.List;   

  import   com.ctgusec.zhupan.model.User; 

  import   com.ibatis.sqlmap.client.SqlMapClientBuilder;   

  /**  

 * 

 * 
 @author  zhupan 

 
 */ 
 

  public    class   ExampleMain  

  

       
 public   static   void  update()  

              
 //  首先初始化 iBatis 获得一个 SqlMapClient 对象  
 

              String resource 
 =   " com/ctgusec/zhupan/maps/SqlMapConfig.xml " 

              com.ibatis.sqlmap.client.SqlMapClient sqlMap 
 =   null 

              
 try   

                     java.io.Reader reader 
 =  com.ibatis.common.resources.Resources.getResourceAsReader(resource); 

                     sqlMap 
 =  SqlMapClientBuilder.buildSqlMapClient(reader); 

              }
 
  catch  (Exception e)  

                     e.printStackTrace(); 

              }
 
 

              
 //  sqlMap 系统初始化完毕,开始执行 update 操作  
 

               
 try   

                     sqlMap.startTransaction(); 

                     User user 
 =   new  User(); 

                     user.setId(
 new  Integer( 1 )); 

                     user.setName(
 " zhupan " ); 

                     user.setSex(
 new  Integer( 1 )); 

                     sqlMap.update(
 " updateUser " , user); 

                     sqlMap.commitTransaction(); 

              }
 
  catch  (SQLException e)  

                     System.out.println(e.getMessage()); 

              }
 
  finally   

                     
 try   

                            sqlMap.endTransaction(); 

                     }
 
  catch  (SQLException e)  

                            e.printStackTrace(); 

                     }
 
 

              }
 
 

       }
 
 

       
 public   static  List getUser()  

 //             首先初始化 iBatis 获得一个 SqlMapClient 对象  
 

              String resource 
 =   " com/ctgusec/zhupan/maps/SqlMapConfig.xml " 

              com.ibatis.sqlmap.client.SqlMapClient sqlMap 
 =   null 

              List user
 = null 

              
 try   

                     java.io.Reader reader 
 =  com.ibatis.common.resources.Resources.getResourceAsReader(resource); 

                     sqlMap 
 =  SqlMapClientBuilder.buildSqlMapClient(reader); 

              }
 
  catch  (Exception e)  

                     e.printStackTrace(); 

              }
 
 

              
 //  sqlMap 系统初始化完毕,开始执行 getAllUser 操作  
 

               
 try   

                     sqlMap.startTransaction();                         

                     user
 = sqlMap.queryForList( " getAllUser "  null ); 

                     sqlMap.commitTransaction(); 

              }
 
  catch  (SQLException e)  

                     System.out.println(e.getMessage()); 

              }
 
  finally   

                     
 try   

                            sqlMap.endTransaction(); 

                     }
 
  catch  (SQLException e)  

                            e.printStackTrace(); 

                     }
 
 

              }
 
 

              
 return  user; 

       }
 
 

       
 public   static   void  main(String[] args)  

              update(); 

              List user
 = getUser();       

              
 for ( int  i = 0 ;i < user.size();i ++ 

              
 

                     System.out.println(((User)user.get(i)).getName()); 

              }
 
 

       }
 
 

}
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值