随笔-6  评论-0  文章-4  trackbacks-0

最简单的 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()); 

              }
 

       }
 

}
 
posted on 2008-08-01 11:17 chencj 阅读(802) 评论(0)  编辑  收藏 所属分类: orm工具

只有注册用户登录后才能发表评论。


网站导航: