e代剑客——温柔一刀

生活就像海洋,只有意志坚强的人,才能到达彼岸

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  76 随笔 :: 7 文章 :: 215 评论 :: 0 Trackbacks

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

              }
 

       }
 

}
 


运行时把 lib 包下的所有 .jar 构建到路径中,操作如下: (图片未能显示,附件里面有) 

点击   (图片未能显示,附件里面有)  找到.jar文件全部选中,确认即可  

总结:iBatis确实简单灵活,上手容易,代码很少,配置稍嫌复杂。动态SQL的确是个强点,熟悉后感觉很不错。iBatis中所有的DAO方法都只传一个值对象,复杂查询当然也不例外。另外对常见的1:11:N关系的支持不如Hibernate。使用iBatis 2.01.0有较大区别,主要体现在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地实现DAO模式。持久层使用了iBatis后,团队中以前乱七八糟的jdbc包装不见了,大家的编码风格统一了,可以集中精力进行业务组件的编写!  

源文件下载 进入页面: http://ctguzhupan.go1.icpcn.com/ibatis/ibatis.html   

参考文献: ibatis 开发指南》  

Ps :第一次写这东西,表达能力实在不怎么样!结合《 ibatis 开发指南》会更容易明白!有不明白的地方也可以联系我,我将尽力帮助,有错误地方也请指正,谢谢!

blog e代剑客     email zhupanjava@gmail.com   

e代剑客 2006 8 1 完成于 三峡大学软件工程中心

posted on 2006-08-11 14:05 温柔一刀 阅读(6593) 评论(16)  编辑  收藏 所属分类: 开源框架

评论

# re: 最简单的iBatis入门例子 2006-08-11 15:16 温柔一刀
昏,图片搞不上来啊  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-08-12 10:47 温柔一刀
源文件和说明文件也可以到群4799157共享里面下载  回复  更多评论
  

# re: iBatis入门例子 2006-08-12 11:18 testffff
不错,很顺利的运行通过  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-08-12 11:19 testffff
是纯java工程啊,有没有web的?  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-08-12 13:51 温柔一刀
@testffff
过几天闲下来了再写一个spring+ibatis的简单入门例子
  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-08-13 18:37 方法学
收藏  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-10-04 12:32 zengliangzhu
受益匪浅让我省去了很多时间入门
感谢万分,希望有好的作品请邮件方式通知我  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-12-10 20:37 浩境
最好有Struts+Spring+ibatis的简单入门例子
Spring+ibatis  回复  更多评论
  

# re: 最简单的iBatis入门例子 2006-12-16 12:02 温柔一刀
@浩境
一样的,把springmvc换成struts就行了  回复  更多评论
  

# re: 最简单的iBatis入门例子 2007-02-23 16:58 inthewater0
谢谢提供  回复  更多评论
  

# re: 最简单的iBatis入门例子 2007-06-11 17:46 kk
谢谢!  回复  更多评论
  

# re: 最简单的iBatis入门例子 2007-07-17 10:19 davy
非常感谢.
  回复  更多评论
  

# re: 最简单的iBatis入门例子 2007-08-16 11:04 kfc
谢谢..  回复  更多评论
  

# re: 最简单的iBatis入门例子 2008-04-22 16:19 cainiao
十分感谢  回复  更多评论
  

# re: 最简单的iBatis入门例子 2008-07-13 09:22 roben
谢谢~!
非常不错。
是一个很好的捷径~!  回复  更多评论
  

# re: 最简单的iBatis入门例子 2009-06-20 16:56 居士
很好的例子  回复  更多评论
  


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


网站导航:
 
联系偶 zhupanjava@gmail.com 温柔一刀