`
xvm03
  • 浏览: 140714 次
  • 来自: ...
社区版块
存档分类
最新评论

ibatis入门

阅读更多

ibatis持久化框架使用2007-08-25 10:26最近很火,所以我也下了一个用了一下。看看它与hibernate的异同。

在执行大量数据库操作时,我们的SQL语句必然要得到优化后才能使用。

而Hibernate给我们的条件实在是太局限,在做大型数据操作时候,难免会觉得不是那么快。

ibatis给我的感觉就是短而精悍,可以让我们自定义过程,相当一个半自动的框架。给于程序

员的控制性比较大,使用起来也是比较方便。


-------------------------------------------------------------------------------------

ibatis最主要需要3个jar包:

                        ibatis-sqlmap-2.jar            主要包

                        ibatis-common-2.jar           提供的命令

                        ibatis-dao-2.jar                   简单DAO

 

我的工程结构是这样:

 


首先要编写一个读取配置文件的类:

我编写了一个IbatisFactory的工厂类,用于读取sqlmap-config.xml里面的配置

--------------------------------

package org.ibatis.model.config;

import java.io.IOException;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class IbatisFactory {
    /*使用单例模式,让整个程序中只有一个实例*/
    private final static SqlMapClient sqlMapper;

    /*其中最主要就是获得SqlMapClient这个类,他相当hibernate中的session用来完成数据库操作*/
    public static SqlMapClient newInstence(){
        return sqlMapper;
    }
   
    /*使用静态块来加载读取配置文件的过程*/
    static {
        try {
              java.io.Reader reader = Resources.getResourceAsReader("org/ibatis/model/config/sqlmap-config.xml");
              sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
              reader.close();
            } catch (IOException e) {
              // Fail fast.
                System.out.println("读出XML文件时异常");
              throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
            }
    }
}

-------------------------------------

sqlmap-config.xml 的配置文件


-------------------------------------


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<!--
        cacheModelsEnabled - 高速缓冲存储器
        enhancementEnabled - 字节码增强
        lazyLoadingEnabled - 延迟加载
        maxRequests - 最大请求
        maxSessions - 最大会话
        maxTransactions - 最大事务数
        useStatementNamespaces - 使用statement命名空间
    -->
<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="com.mysql.jdbc.Driver" />
            <property name="JDBC.ConnectionURL"
                value="jdbc:mysql://127.0.0.1:3306/ibatis?characterEncoding=utf-8" />
            <property name="JDBC.Username" value="root" />
            <property name="JDBC.Password" value="" />
            <property name="JDBC.DefaultAutoCommit" value="false" />
            <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 ibatis" />
            <property name="Pool.PingEnabled" value="false" />
            <property name="Pool.PingConnectionsOlderThan" value="1" />
            <property name="Pool.PingConnectionsNotUsedFor" value="1" />
        </dataSource>
    </transactionManager>
    <!-- 指定POJO的配置文件的存放的地址 -->
    <sqlMap resource="org/ibatis/model/entity/User.xml" />
</sqlMapConfig>

----------------------------------------

然后,我们通过数据库的表设计一个POJO:User.java

package org.ibatis.model.entity;

/**
* iBatis - User.java ----------------------------------------------
*
* @version 0.1 2007-8-24
* @author banseon ---------------------------------------------- 说明:
*         实体Bean 数据库映射表为T_USER
*/
public class User implements Entity {
   private long id;
   private String username;
   private String address;

   public String getAddress() {
       return address;
   }

   public void setAddress(String address) {
       this.address = address;
   }

   public long getId() {
       return id;
   }

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

   public String getUsername() {
       return username;
   }

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

   @Override
   public String toString() {
       String str = "Username:" + username + "\n";
       str += "Address:" + address;
       return str;
   }
}
--------------------------------------
上面只是一个普通的POJO,最主要还是下面的配置文件User.xml文件

--------------------------------------
<?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="User">

   <!-- 为了简化这里将类在配置文件中指定一个别名,方便调用 -->
    <typeAlias alias="User" type="org.ibatis.model.entity.User"/>
   
    <resultMap id="UserResult" class="User">
        <result property="username" column="USERNAME"/>
        <result property="address" column="ADDRESS"/>
    </resultMap>
   
    <select id="getUserbyUsername" resultMap="UserResult">
        select * from T_USER WHERE USERNAME = #username#
    </select>

<!--
        这里提供了增删改查4种配置,里面都有id,这里的id主要起到一个唯一性。
        给DAO中的方法调用,你可以编写多个insert配置,但id都要不同。
        parameterClass 指的是调用的参数类 后面的名称是这个类的别名
        每个操作的中间都带有SQL语句,其中代"#"的表示是参数。系统自动填充。
   -->

<!-- Insert example, using the User parameter class -->
<insert id="insert" parameterClass="User">
    insert into T_USER (ID,USERNAME,ADDRESS)
    values (#id#,#username#,#address#)
</insert>

    <!-- Update example, using the User parameter class -->
    <update id="update" parameterClass="User">
    update T_USER set
      USERNAME = #username#,
      ADDRESS = #address#
    where
      ID = #id#
    </update>
   
    <!-- Delete example, using an integer as the parameter class -->
    <delete id="delete" parameterClass="int">
    delete from T_USER where ID = #id#
    </delete>

</sqlMap>
-------------------------------------

最后我们来编写一个DAO来测试一下:

-------------------------------------
package org.ibatis.model.dao;

import java.sql.SQLException;

import org.ibatis.model.config.IbatisFactory;

import org.ibatis.model.entity.User;

import com.ibatis.sqlmap.client.SqlMapClient;


public class UserDAO {
   
    //通过工厂得到sqlMapClient实例
    protected SqlMapClient sqlMapClient = IbatisFactory.newInstence();


    /**
    * 插入方法
    */
    public void insert(User entity) {
        try {
            sqlMapClient.startTransaction();//开始事务
            sqlMapClient.insert("insert", entity);//这里很总要,第一个参数是指定调用的哪个插入方法
            sqlMapClient.commitTransaction();//提交事务
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                sqlMapClient.endTransaction();//关闭事务
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }//插入方法结束
}

public static void main(String[] args) {
        UserDAO _dao = new UserDAO();
        org.ibatis.model.entity.User user = new org.ibatis.model.entity.User();
        user.setId(0);
        user.setAddress("123123123123");
        user.setUsername("banseon123");
        _dao.insert(user);
    }
--------------------------------------

最后直接插入到数据库当中。
 

  • 大小: 29 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics