ibatis入门

来源:互联网 发布:it设备资产管理 编辑:程序博客网 时间:2024/04/30 17:14
最简单的 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()); 

              }
 
 

       }
 
 

}