论坛首页 入门技术论坛

ibatis 开始之旅

浏览 18139 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-01-10  
    用了很久hibernate ,突然想换个别的orm 工具,当然在orm领域中,hibernate是老大。看了一下ibatis,发现如果对于crud操作不是很多的系统来说,是个不错的选择,尤其是适合 那些对sql和性能热衷的开发者。综合来说ibatis不能算orm工具,只能算个半成品。不过比起直接用jdbc写,那还是方便多了。主要的好处是分离 了sql和代码,如果你想追求性能,那么sql是你很好的利器,当然ibatis的缓存也不错。比起hibernate,ibatis就简单多了,估计也 就3天能够基本掌握了,这大大减少了学习成本。
    说了那么多废话,下面开始正题,通过一个简单的实例开始ibatis之旅,文章大部分参考网上的ibatis 开发指南一文。
    主要的jar:ibatis 2.3.0,spring 2.0.1,log4j 1.2.9,commons-logging 1.0.4,hsqldb 1.8.0
    ibatis实例配置:
xml 代码
 
  1. <sqlMapConfig>  
  2. -- 事务采用spring 管理 -->  
  3. <sqlMap resource="org/esoft/bo/xml/Account.xml"/>  
  4. sqlMapConfig>      
创建POJO对象:

 
java 代码
 
  1. package com.esoft.bo;  
  2.   
  3. public class Account {  
  4.   
  5.     private String emailAddress;  
  6.   
  7.     private String firstName;  
  8.   
  9.     private int id;  
  10.   
  11.     private String lastName;  
  12.   
  13.     public String getEmailAddress() {  
  14.         return emailAddress;  
  15.     }  
  16.   
  17.     public String getFirstName() {  
  18.         return firstName;  
  19.     }  
  20.   
  21.     public int getId() {  
  22.         return id;  
  23.     }  
  24.   
  25.     public String getLastName() {  
  26.         return lastName;  
  27.     }  
  28.   
  29.     public void setEmailAddress(String emailAddress) {  
  30.         this.emailAddress = emailAddress;  
  31.     }  
  32.   
  33.     public void setFirstName(String firstName) {  
  34.         this.firstName = firstName;  
  35.     }  
  36.   
  37.     public void setId(int id) {  
  38.         this.id = id;  
  39.     }  
  40.   
  41.     public void setLastName(String lastName) {  
  42.         this.lastName = lastName;  
  43.     }  
  44.   
  45. }      

映射文件,感觉比较的麻烦。以后有机会的话一定自动生成此文件,尤其现在jpa当道。
 
xml 代码
 
  1. <sqlMap namespace="Account">  
  2.      
  3.     <typeAlias alias="Account" type="com.esoft.bo.Account"/>  
  4.   
  5.     <resultMap id="AccountResult" class="Account">  
  6.         <result property="id" column="ACC_ID"/>  
  7.         <result property="firstName" column="ACC_FIRST_NAME"/>  
  8.         <result property="lastName" column="ACC_LAST_NAME"/>  
  9.         <result property="emailAddress" column="ACC_EMAIL"/>  
  10.     </resultMap>  
  11.   
  12.     <select id="selectAccountById" parameterClass="int" resultClass="Account">  
  13.         select ACC_ID as id, ACC_FIRST_NAME as firstName, ACC_LAST_NAME as lastName,  
  14.         ACC_EMAIL as emailAddress from ACCOUNT where ACC_ID = #id# </select>  
  15.      
  16.     <insert id="insertAccount" parameterClass="Account"> insert into ACCOUNT ( ACC_ID,  
  17.         ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL) values ( #id#, #firstName#,  
  18.         #lastName#, #emailAddress# ) </insert>  
  19.      
  20.     <update id="updateAccount" parameterClass="Account"> update ACCOUNT set  
  21.         ACC_FIRST_NAME = #firstName#, ACC_LAST_NAME = #lastName#, ACC_EMAIL =  
  22.         #emailAddress# where ACC_ID = #id# </update>  
  23.      
  24.     <delete id="deleteAccountById" parameterClass="int"> delete from ACCOUNT where  
  25.         ACC_ID = #id# </delete>  
  26.       
  27. </sqlMap>     


spring 配置:
 
xml 代码
 
  1. ...  
  2. <bean id="dataSource"  
  3.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  4.         <property name="driverClassName">  
  5.             <value>${jdbc.driverClassName}<!---->value>  
  6.         <!---->property>  
  7.         <property name="url">  
  8.             <value>${jdbc.url}<!---->value>  
  9.         <!---->property>  
  10.         <property name="username">  
  11.             <value>${jdbc.username}<!---->value>  
  12.         <!---->property>  
  13.         <property name="password">  
  14.             <value>${jdbc.password}<!---->value>  
  15.         <!---->property>  
  16.     <!---->bean>  
  17.          <bean id="transactionManager"  
  18.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  19.         <property name="dataSource" ref="dataSource"/>  
  20.      <!---->bean>  
  21.       
  22.        <bean id="sqlMapClient"  
  23.         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  24.         <property name="dataSource" ref="dataSource"/>  
  25.         <property name="configLocation">  
  26.             <value>SqlMapConfig.xml<!---->value>  
  27.         <!---->property>  
  28.       <!---->bean>  
  29.       <bean id="accountDao" class="org.esoft.dao.AccountDaoImpl">  
  30.              <property name="sqlMapClient" ref="sqlMapClient"/>  
  31.       <!---->bean>       
 
    

主要的代码:
java 代码
 
  1. public class AccountDaoImpl  
  2.         extends SqlMapClientDaoSupport {  
  3.     public PK save(Account obj) {  
  4.         return (PK) getSqlMapClientTemplate().insert("insertAccount", obj);  
  5.     }  
  6.     public void update(Accountobj) {  
  7.         getSqlMapClientTemplate().update("updateAccount", obj);  
  8.     }  
  9.      public void delete(Account obj) {  
  10.         getSqlMapClientTemplate().delete(  
  11.                 "deleteAccountById",  
  12.                 obj.getPk());  
  13.     }  
  14.     public Account get(PK primaryKey) {  
  15.         return (Account) getSqlMapClientTemplate().queryForObject(  
  16.                 "selectAccountById",  
  17.                 primaryKey);  
  18.     }  
  19. }  

   发表时间:2007-01-11  
以前,感觉,相对其它的orm工具简单多了
0 请登录后投票
   发表时间:2007-01-13  
IBATIS 自由度比较好,
对于熟悉SQL的程序员比较适合。
应该将SQL升级为编程语言来认同,不需要回避SQL.
0 请登录后投票
   发表时间:2007-01-13  
与hibernate相比,ibatis属于是半自动的;可以说他就是SQL+XML,不过它没有抛弃SQL语言的灵活易学性,并且语句映射也比较简单,容易上手,还有通过可插入的缓存策略,SQL Maps提供了对缓存查询结果的支持。
项目中如果没有人熟悉hibernate,ibatis就是很好的选择啊!
0 请登录后投票
   发表时间:2007-01-13  
一般程序员会用ibatis3天差不多了
想用好hibernate3个月都不容易~
0 请登录后投票
   发表时间:2007-01-13  
ibatis的缓存还有待完善,如果缓存粒度可以更细一些就好了
0 请登录后投票
   发表时间:2007-01-16  
ibatis 有几个地方还是不大明白:
1,比如:  select top 5 from table where ...
这里的5,我想由程序来指定,我该怎么实现? select top #value# from ... 好像是不行的。
2,顺便再提个问题,都是实际应用中遇到的。
一个pojo包含数据类型为 java.math.BigDecimal 的成员变量对应 mssql2005 数据库的 money 类型字段,再执行一次更新操作时,报如下错误:
---------------------------------------------------------
nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/xxx/xxx/xxxModel.xml.
--- The error occurred while applying a parameter map.
--- Check the update_xxx_money-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Error converting data type nvarchar to decimal.

--------------------------------------------------------
怀疑是数据库更新操作时字段转化出的问题,请问大家是怎么解决的?
ibatis版本为 2.2.0 。

0 请登录后投票
   发表时间:2007-01-16  
select top $value$ from
0 请登录后投票
   发表时间:2007-01-16  
参考,多谢,买了ibatis in action,不错
0 请登录后投票
   发表时间:2007-01-16  
lordhong 写道
参考,多谢,买了ibatis in action,不错


哈哈,这本现在只有电子版吧?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics