随笔-5  评论-41  文章-13  trackbacks-0
其实Ibatis的文档里面已经讲得很详细,所以这里指总结一些简单的入门问题:
配置文件
    sql-map-config.xml
<!DOCTYPE sqlMapConfig PUBLIC
          "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
          "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"
>

<sqlMapConfig>

  
<properties resource="properties/database.properties"/>

  
<settings cacheModelsEnabled="true" enhancementEnabled="false"
            maxSessions
="64" maxTransactions="8" maxRequests="128" useStatementNamespaces="true"/>

  
<transactionManager type="JDBC">
    
<dataSource type="SIMPLE">
      
<property value="${driver}" name="JDBC.Driver"/>
      
<property value="${url}" name="JDBC.ConnectionURL"/>
      
<property value="${username}" name="JDBC.Username"/>
      
<property value="${password}" name="JDBC.Password"/>
      
<property value="15" name="Pool.MaximumActiveConnections"/>
      
<property value="15" name="Pool.MaximumIdleConnections"/>
      
<property value="1000" name="Pool.MaximumWait"/>
    
</dataSource>
  
</transactionManager>
  
<sqlMap resource="com/xxx/sql/Accout.xml"/>
</sqlMapConfig>

database.properties
####################################
# Database Connectivity Properties
####################################

driver
=com.mysql.jdbc.Driver
url
=jdbc:mysql://localhost:3306/test
username
=root
password
=


Accout.xml  (sqlmap)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//En" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="NS_Account">
    
<typeAlias alias="Account" type="com.ibatis.domain.Accout"/>
    
<resultMap id="AccountResult" class="Account">
        
<result property="accountId" column="Account_ID"/>
        
<result property="name" column="Name"/>
        
<result property="password" column="Password"/>
        
<result property="type" column="Type"/>
    
</resultMap>

    
<insert id="insert" parameterClass="Account">
        
<![CDATA[
        insert into T_Admin_Account(
            Name, Password, Type, Account_ID
        ) values (
            #name#, #password#, #type#, #accountId#
        )
        
]]>
    
</insert>

    
<select id="findAll" resultMap="AccountResult" parameterClass="Account">
        
<![CDATA[
        select * from T_Admin_Account
        order by Account_ID
        
]]>
    
</select>

    
<delete id="delete" parameterClass="Account">
        
<![CDATA[
        delete  from T_Admin_Account
        where Account_ID = #accountId#
        
]]>
    
</delete>

    
<update id="update" parameterClass="Account">
        
<![CDATA[
        update T_Admin_Account
        set Name = #name#, Password = #password#, Type = #type#
        where Account_ID = #accountId#
        
]]>
    
</update>

</sqlMap>
取得sqlmapclient:
private static SqlMapClient sqlmapclient= null;
//

Reader reader 
= null;
try {
  reader 
= Resources.getResourceAsReader(
    
"com/ibatis/domain/sql/sql-map-config.xml");
 
sqlmapclient= SqlMapClientBuilder.buildSqlMapClient(reader);
catch (Exception e) {
  e.printStackTrace();
}

在设置好这些东西后,使用类似上面的代码取得sqlmapclient之后就可以使用sqlmapclient进行数据库操作了。
应该注意到因为配置文件中使用了
namespace(在<settings中设置了 useStatementNamespaces="true"/>),所以在sqlmapclient进行操作时要记住使用namespace。如:
sqlmapclient.insert("NS_Account.insert",new Acount());
这是为了避免sqlmap配置文件中出现相同名字的方法时产生冲突。


如果使用spring进行代码的组织,那么事情将变得更加简单,你只要在spring的配置文件里面使用
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="configLocation">
            
<value>com/ibatis/domain/sql/sql-map-config.xml</value>
        
</property>
        
<property name="dataSource">
            
<ref bean="dataSource"/>
        
</property>
    
</bean>
sqlMapClient进行注册,然后注入到相应的dao里面就可以了,spring还提供了简便的SqlMapClientDaoSupport,这也会对你的程序很有帮助。

如果你只是想使用ibatis自己提供的dao框架也可以。为了使用dao框架,还需要另外的配置文件:
dao.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE daoConfig PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN" "http://www.ibatis.com/dtd/dao-2.dtd">
<daoConfig>
    
<!-- Example SQL Maps DAO Configuration -->
    
<context>
        
<transactionManager type="SQLMAP">
            
<property name="SqlMapConfigResource"
                value
="sql-map-config.xml" />
        
</transactionManager>
        
<dao interface="com.ln.dao.CategoryDao"
            implementation
="com.ln.daoImpl.ibatis.CategoryDaoImplSqlMap" />
            
<dao interface="com.ln.dao.CalDao"
            implementation
="com.ln.daoImpl.ibatis.CalDaoImplSqlMap" />
    
</context>
</daoConfig>
而且在你的dao interface中要继承com.ibatis.dao.client.Dao接口(这只是一个标志性借口,没有任何方法)
在程序中就可以使用:
        Reader reader = null;
        DaoManager daoManager
=null;
        
try {
          reader 
= Resources.getResourceAsReader(
            
"com/ibatis/domain/sql/dao.xml");
          daoManager 
= DaoManagerBuilder.buildDaoManager(reader);
        } 
catch (Exception e) {
          e.printStackTrace();
        }
        daoManager.getDao(CalDao.
class);

这样的程序来取得dao,这也能很好的把dao提供的方法与具体的实现分离开来。
在使用ibatis的dao框架时,最好在dao实现类中继承ibatis提供的SqlMapDaoTemplate ,
它是dao框架提供的一个模版类,用来管理dao mapper框架的各个方面,也可以简化你的工作

public classCalDaoImpl extends SqlMapDaoTemplate implementsCalDao{
  
publicCalDaoImpl (DaoManager daoManager) {
    
super(daoManager);
  }
}

继承之后只用在实现一个带DaoManager 参数的构造函数就可以了。这个构造函数并不需要手动调用,使用daoManager.getDao(CalDao.class);来取得dao实例的时候,框架会自动进行调用。
之后在你的daoImpl里面就可以直接使用queryForList等sqlmapclient提供的方法了

这样ibatis的介绍基本完成。

那为什么要使用Ibatis呢?原因很简单,它很好地屏蔽掉了
Connection,statement,resultset等直接使用jdbc是很烦人的地方,又可以直接使用sql语句非常灵活地进行数据库操作(特别是配置文件中的动态sql语句更是足够的灵活),而且还提供了连接池,cache,事务管理等支持。使用起来简单而又强大
posted on 2006-04-12 10:18 OO 阅读(759) 评论(0)  编辑  收藏 所属分类: 框架、工具的使用

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


网站导航: