闲人野居
好好学习,天天向上
posts - 57,  comments - 137,  trackbacks - 0
    用了很久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实例配置:
 
<sqlMapConfig>
<!-- 事务采用spring 管理 -->
  <!--
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost/xdb"/>
      <property name="JDBC.Username" value="sa"/>
      <property name="JDBC.Password" value=""/>
    </dataSource>
  </transactionManager>
-->
  <sqlMap resource="org/esoft/bo/xml/Account.xml"/>
</sqlMapConfig>    

创建POJO对象:

 
package com.esoft.bo;

public class Account {

    private String emailAddress;

    private String firstName;

    private int id;

    private String lastName;

    public String getEmailAddress() {
        return emailAddress;
    }

    public String getFirstName() {
        return firstName;
    }

    public int getId() {
        return id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}    

映射文件,感觉比较的麻烦。以后有机会的话一定自动生成此文件,尤其现在jpa当道。
 
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Account">
    
    <!-- Use type aliases to avoid typing the full classname every time. -->
    <typeAlias alias="Account" type="com.esoft.bo.Account"/>
    
    <!-- Result maps describe the mapping between the columns returned
    from a query, and the class properties.  A result map isn't
    necessary if the columns (or aliases) match to the properties
    exactly. -->
    <resultMap id="AccountResult" class="Account">
        <result property="id" column="ACC_ID"/>
        <result property="firstName" column="ACC_FIRST_NAME"/>
        <result property="lastName" column="ACC_LAST_NAME"/>
        <result property="emailAddress" column="ACC_EMAIL"/>
    </resultMap>
    
    <!-- Select with no parameters using the result map for Account class. -->
    <select id="selectAllAccounts" resultMap="AccountResult">
        select * from ACCOUNT
        </select>
    
    <select id="selectByName" resultMap="AccountResult" parameterClass="String">
        select * from Account where ACC_FIRST_NAME like #name#
    </select>
    
    <!-- A simpler select example without the result map.  Note the
    aliases to match the properties of the target result class. -->
    <select id="selectAccountById" parameterClass="int" resultClass="Account">
        select ACC_ID as id, ACC_FIRST_NAME as firstName, ACC_LAST_NAME as lastName,
        ACC_EMAIL as emailAddress from ACCOUNT where ACC_ID = #id# </select>
    
    <!-- Insert example, using the Account parameter class -->
    <insert id="insertAccount" parameterClass="Account"> insert into ACCOUNT ( ACC_ID,
        ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL) values ( #id#, #firstName#,
        #lastName#, #emailAddress# ) </insert>
    
    <!-- Update example, using the Account parameter class -->
    <update id="updateAccount" parameterClass="Account"> update ACCOUNT set
        ACC_FIRST_NAME = #firstName#, ACC_LAST_NAME = #lastName#, ACC_EMAIL =
        #emailAddress# where ACC_ID = #id# </update>
    
    <!-- Delete example, using an integer as the parameter class -->
    <delete id="deleteAccountById" parameterClass="int"> delete from ACCOUNT where
        ACC_ID = #id# </delete>
    
    <delete id="clearAccount"> delete from ACCOUNT </delete>
    
</sqlMap>    

spring 配置:
 
...
<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>${jdbc.driverClassName}</value>
        </property>
        <property name="url">
            <value>${jdbc.url}</value>
        </property>
        <property name="username">
            <value>${jdbc.username}</value>
        </property>
        <property name="password">
            <value>${jdbc.password}</value>
        </property>
    </bean>
         <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
     </bean>
    
       <bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation">
            <value>SqlMapConfig.xml</value>
        </property>
      </bean>
      <bean id="accountDao" class="org.esoft.dao.AccountDaoImpl">
             <property name="sqlMapClient" ref="sqlMapClient"/>
      </bean>       
    

主要的代码:
public class AccountDaoImpl
        extends SqlMapClientDaoSupport {
    public PK save(Account obj) {
        return (PK) getSqlMapClientTemplate().insert("insertAccount", obj);
    }
    public void update(Accountobj) {
        getSqlMapClientTemplate().update("updateAccount", obj);
    }
     public void delete(Account obj) {
        getSqlMapClientTemplate().delete(
                "deleteAccountById",
                obj.getPk());
    }
    public Account get(PK primaryKey) {
        return (Account) getSqlMapClientTemplate().queryForObject(
                "selectAccountById",
                primaryKey);
    }
}


posted on 2007-01-10 20:27 布衣郎 阅读(2281) 评论(1)  编辑  收藏 所属分类: orm

FeedBack:
# re: ibatis 开始之旅
2007-01-14 22:57 | JooRoo
好文!  回复  更多评论
  

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


网站导航:
 

<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(12)

随笔分类(59)

随笔档案(57)

blog

java

uml

搜索

  •  

积分与排名

  • 积分 - 356471
  • 排名 - 155

最新评论

阅读排行榜

评论排行榜