`
zyl
  • 浏览: 486237 次
社区版块
存档分类
最新评论

ibatis 开始之旅

    博客分类:
  • ORM
阅读更多
    用了很久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. }  

分享到:
评论
23 楼 javaIE 2007-08-03  
我一直是用hibernate,看来很有必要学下这个了啊!
22 楼 heartsong 2007-08-03  
iBatis确实不是很难,我学了两天,基本会用了。
21 楼 javaIE 2007-06-18  
看来有必要学习下.我一直是用Hibernate开发的
20 楼 kin_me 2007-06-09  
那我在项目中同时使用hibernate和ibatis会不会有问题,
特别是在缓存中,
在POJO持久态的时候。
19 楼 WinLive 2007-06-08  
Hibernate 需要较强的OO
而ibatis的使用更符合使用了SQL已久的程序员,既有了ORM的映射,又不失SQL的灵活
18 楼 hiwzg 2007-06-08  
ibatis确实易于掌控一些,特别是你对SQL比较熟悉的时候,能看到SQL代码真的是一件比较幸福的事情。
17 楼 小嘴看世界 2007-06-08  
simohayha 写道
lordhong 写道
参考,多谢,买了ibatis in action,不错


哈哈,这本现在只有电子版吧?

能下载到英文版的PDF 还没怎么看过
16 楼 hwangita 2007-06-06  
唉,照这么发展下去,东西哪学得完啊,都差不多,理解就行了啊
15 楼 efanstudio 2007-06-06  
我在运行的时候(往数据库里添加记录时),总是报下列异常:
No SqlMapClient specified
请问是什么原因造成的?谢谢!
14 楼 lordhong 2007-01-21  
simohayha 写道
lordhong 写道
参考,多谢,买了ibatis in action,不错


哈哈,这本现在只有电子版吧?

是啊,本来1月份有的,后来貌似拖到3月份了,只好先看电子版的
13 楼 jamesby 2007-01-20  
$value$的原理是iBatis先拼Sql,所以只要$value$替换后Sql完整就可以了!
12 楼 anxingyu_1984 2007-01-20  
受益匪浅!
11 楼 roc8633284 2007-01-17  
----------
已经和前贴合并。
10 楼 roc8633284 2007-01-16  
宏基小键盘 写道
select top $value$ from

试过,多谢。
9 楼 simohayha 2007-01-16  
lordhong 写道
参考,多谢,买了ibatis in action,不错


哈哈,这本现在只有电子版吧?
8 楼 lordhong 2007-01-16  
参考,多谢,买了ibatis in action,不错
7 楼 宏基小键盘 2007-01-16  
select top $value$ from
6 楼 roc8633284 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 。

5 楼 deafwolf 2007-01-13  
ibatis的缓存还有待完善,如果缓存粒度可以更细一些就好了
4 楼 asdfasdf 2007-01-13  
一般程序员会用ibatis3天差不多了
想用好hibernate3个月都不容易~

相关推荐

    java+ibatis实例教程

    Java+MyBatis 实例教程 Java 和 MyBatis 是两个在软件开发中广泛应用的技术,尤其是在构建企业级 Web 应用程序时。Java 是一种面向对象的编程语言,以其跨平台性和强大...祝你在 Java+MyBatis 的学习之旅中收获满满!

    ibatis in action

    《iBATIS in Action》是一本专注于iBATIS框架的英文版专著,它为读者提供了一条深入了解...而压缩包内的"IBATIS in Action - Manning.pdf"正是这本书的电子版,它将带你走进iBATIS的世界,开启你的持久层框架学习之旅。

    强烈推荐的 iBATIS 书籍

    iBATIS 是一款著名的开源Java持久层框架,它在2005年由Mike...对于那些热衷于源码分析和工具研究的标签爱好者,这本书将是一次深度探索之旅,帮助他们深入理解iBATIS 的内部工作原理,并提升其在Java开发中的技能水平。

    淘宝实习笔记--webx学习之旅

    【淘宝实习笔记--webx学习之旅】这篇笔记主要记录了作者在淘宝实习期间关于Webx框架的学习和理解。Webx是一个用于构建企业级Web应用程序的框架,它在淘宝内部广泛使用。以下是一些核心知识点: 1. **iBATIS**:...

    一个程序员的自省(博客园)--超级推荐

    作者通过自己的F#探险之旅,整理了相关教程,帮助初学者快速入门,并对比了F#与C#的差异,强调了函数式编程的优势。 【Visual Studio插件增强开发体验】 Visual Studio的插件生态系统极大地丰富了IDE的功能,使...

    Spring in Action(第2版)中文版

    第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 1.3.1依赖注入 1.3.2di应用 1.3.3企业级应用中的依赖注入 1.4应用aop 1.4.1aop介绍 1.4.2aop使用 1.5小结 第2章基本bean装配 ...

    Spring in Action(第二版 中文高清版).part2

    第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP使用 1.5 小结 第2章 ...

    Spring in Action(第二版 中文高清版).part1

    第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP使用 1.5 小结 第2章 ...

    Mybatis-Spring1.0.2中文版说明文档

    ### 章节二:开始 Mybatis-Spring 之旅 这部分可能涉及如何设置项目,配置Spring和Mybatis的集成,以及如何创建和管理SqlSession和Mapper接口。 ### 章节三:SqlSessionFactoryBean SqlSessionFactoryBean是...

    通向架构师的道路.rar

    6. **通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅.docx** Oracle是广泛使用的数据库系统,性能调优是提升数据库效率的关键。文档可能涵盖了索引优化、查询优化、存储结构调整等方法,帮助读者深入...

    spring in action英文版

    例如,第1章“开始Spring之旅”介绍了使用Spring的原因,包括J2EE开发者的日常工作以及Spring提供的承诺。此外,Spring的反向控制(IoC)和面向切面编程(AOP)是Spring框架的核心特性,而这一部分也详细解释了如何...

    Flex技术入门之如何创建flex的web工程

    【Flex技术入门:创建Web工程详解】 Flex技术是Adobe公司为了解决Flash开发难题而推出的一种专门面向程序开发人员的...在开始Flex开发之旅之前,了解其优缺点和创建Web工程的基本流程,将有助于你更好地掌握这项技术。

    SpringBoot整合Mybatis初学者,简单实用

    在IT行业中,SpringBoot和Mybatis是两个非常流行的框架,它们分别用于简化Spring应用的开发和处理数据库操作。本文将详细介绍如何将这两个框架...希望这个简明教程能对初学者有所帮助,开启愉快的Java Web开发之旅。

    技术分享之Web服务后台开发框架升级:从SpringMVC+Hibernate到SpringBoot+Mybatis

    MyBatis是一个优秀的持久层框架,其前身是Apache的iBatis项目。它允许开发者以声明式的方式处理SQL查询,并支持存储过程和高级映射。以下是MyBatis的关键特性: - **最新版本**:...

Global site tag (gtag.js) - Google Analytics