hitlermen的专栏

杨勇工作区

O/R Mapping解决方案--iBatis

            iBATIS可以说非常容易上手,只需要懂得JavaBeans, XML 和 SQL就可以顺利应用了;这也是iBATIS的魅力所在(我是这么觉得的呵呵); iBATIS在JavaObject和数据库对应上提供了一个非常简单并且灵活的解决方案。我们只需要使用纯正的SQL语句就可以实现从数据库到JavaObject的转换了,而不用再去写JDBC代码了;仅仅如此就帮助我们在代码上节省了不少时间吧;iBATIS SQL MAPS需要一个简单的XML描述文件,来对应数据库与JavaObjec之间的关系 .

            通过下面简单的例子,相信对iBATIS还陌生的同仁们一定会激动不以了,想马上就练练手了呵呵.  环境:所需要的类库:IBATIS公用的工具类-ibatis-common.jar; IBATIS SQL Maps框架-ibatis-sqlmap.jar

            一个简单的SqlMap定义片段:

            <select id="getAddress" parameterClass="int"                        
            resultClass="examples.domain.Address">      select        ADR_ID    
                  as id,        ADR_DESCRIPTION  as description,       
            ADR_STREET       as street,        ADR_CITY         as city,       
            ADR_PROVINCE     as province,        ADR_POSTAL_CODE  as postalCode 
                from ADDRESS      where ADR_ID = #value#</select>

            在具体实现中的代码:

                    Integer pk = new Integer(5);        Address address =
            (Address)sqlMap.queryForObject("getAddress", pk);

            就是这么简单的完成了。

iBatis是又一个O/R Mapping解决方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBatis是能满足你的要求又足够灵活的最简单的解决方案。

iBatis最大的特点是简单,最新版本2.0(下载),和1.0相比,主要改动在XML配置文件上,不过,只要有SQL基础,相信你不用教程也能看明白。下面我们看一个最简单的例子入门。

我们先建一个表Account,包括字段username, varchar(20), pk和password, varchar(20),随便填入一些数据。然后编写iBatis必须的配置文件sql-map-config.xml,文件名随意,内容如下:

<?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"
    maxRequests="32"
    maxSessions="10"
    maxTransactions="5"
    useStatementNamespaces="false"
  />
  <transactionManager type="JDBC" >
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="sun.jdbc.odbc.JdbcOdbcDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:odbc:Blog"/>
      <property name="JDBC.Username" value="admin"/>
      <property name="JDBC.Password" value=""/>
    </dataSource>

  </transactionManager>
  <sqlMap resource="Account.xml" />
</sqlMapConfig>


其他部分你不用管它,我是直接copy的示例配置,只需注意红色部分,配置好数据源即可。我用的是Access,所以用JdbcOdbc驱动。如果你用MySQL或其他数据库,更改相应的属性。

然后注意到这个配置文件还引用了一个Account.xml,没错,iBatis把每个需要O/R Mapping的Java对象关联到一个xml配置文件,我们需要把一个Account表映射到一个Account类:

package example;
public class Account {
    private String username;
    private String password;

    public String getUsername() { return username; }
    public void setUsername(String username) { this.username=username; }

    public String getPassword() { return password; }
    public void setPassword(String password) { this.password=password; }
}


编写Account.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="Account">

  <select id="getAccount" parameterClass="java.lang.String" resultClass="example.Account">
    select * from Account where username = #value#
  </select>


  <insert id="createAccount" parameterClass="example.Account">
    insert into Account (username, password)
    values ( #username#, #password# )
  </insert>

</sqlMap>

我们主要关心红色部分。以<select ...>为例,这里定义了一个查询方法,名字为getAccount,传入参数为String,返回类型resultClass就是example.Account类,select语句相信你已经很熟悉了,#value#是我们将要传进去的String。

<insert...>与之类似,不过注意到#username#和#password#,由于参数是Account类,它们将被Account.getUsername()和Account.getPassword()替换。所以,只要你会写SQL,就能非常容易地写出配置文件。

最后便是如何使用iBatis实现O/R映射。首先初始化iBatis获得一个SqlMapClient对象:

    com.ibatis.sqlmap.client.SqlMapClient sqlMap = null;
    try {
        java.io.Reader reader = om.ibatis.common.resources.Resources.getResourceAsReader ("sql-map-config.xml");
        sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    } catch (Exception e) {
        e.printStackTrace();
    }


然后就可以异常方便地使用O/R Mapping了,比如查询username=admin的Account:

    try {
        Account accout = (Account)sqlMap.queryForObject("getAccount", "admin");
        ...
    }


或者创建一个新的Account:

    try {
        Account account = new Account();
        account.setUsername("micheal");
        account.setPassword("1234");
        sqlMap.insert("createAccount", account);
    }


运行时把两个配置文件和iBatis的3个jar包放到classpath中,要求jdk1.4版本。

总结:iBatis确实简单灵活,上手容易,代码很少,配置稍嫌复杂。不足之处一是没有方便的工具来自动生成xml配置文件,二是不管是query还是insert都只能传入一个参数,有时不得不把两个参数包装成一个类传进去。另外对常见的1:1,1:N关系的支持不如Hibernate。不过,大多数时候iBatis已经完全可以满足我们的需求。Spring很好的集成了iBatis,你可以参考Spring的JPetStore示例。需要注意的是使用iBatis 2.0和1.0有较大区别,主要体现在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地实现DAO模式。

阅读更多
个人分类: Hibernate技术
想对作者说点什么? 我来说一句

iBatis介绍及入门教程.doc

2016年01月22日 96KB 下载

iBATIS SQL Maps

2011年05月07日 5.51MB 下载

mybatis web开发

2014年09月22日 36KB 下载

iBatis骨头森林博客园

2015年05月15日 93KB 下载

IBatis入门教程

2013年08月06日 370KB 下载

iBatis入门

2011年10月12日 71KB 下载

iBatis简单入门教程.

2014年08月04日 88KB 下载

没有更多推荐了,返回首页

不良信息举报

O/R Mapping解决方案--iBatis

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭