刚学Ibaits,有很多疑问,这不来了:
在ibatis官方网站上下载了JPetStore。
里面涉及到了DaoManager,这个不是很懂,和开始学的SqlMapClient有点混淆了。
那位高人能否帮在下分析一下,SqlMapClient和DaoManager的区别。还有一个不明白的地方是:看到DaoManager在WEB环境下怎么访问数据源,但是自己做的一个SqlMapClient的事例程序,
却不知怎么访问,下面是我从jdbc到JNDI,sqlMapConfig.xml里面配置的情况,程序的其他代码没有变化:
<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"/> 
</dataSource> 
</transactionManager>
-------------------------------------------------------------------------  
<transactionManager type="JDBC"> //数据源能在jsp和servlet中正常访问
<dataSource type="JNDI"> 
<property name="DataSource" value="java:comp/env/jdbc/mySqlJndi" />
</dataSource> 
</transactionManager>
这个也想请教一下,怎么做才能让SqlMapClient访问到数据源。

解决方案 »

  1.   

    以下代码供参考
    ======================配置文件================================================
    <?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" errorTracingEnabled="true" maxRequests="32"
    maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />
    <transactionManager type="JDBC"> <dataSource type="SIMPLE">
    <!--  
    <property name="JDBC.Driver"
    value="COM.ibm.db2.jdbc.net.DB2Driver" />
    <property name="JDBC.ConnectionURL"
    value="jdbc:db2:localhost:wznx" />
    <property name="JDBC.Username" value="db2admin" />
    <property name="JDBC.Password" value="db2admin" />
    -->

    <property name="JDBC.Driver"
    value="com.ibm.db2.jcc.DB2Driver" />
    <property name="JDBC.ConnectionURL"
    value="jdbc:db2://135.55.2.192:50000/RRCRM" />
    <property name="JDBC.Username" value="rrcrm" />
    <property name="JDBC.Password" value="rrcrm" />


    <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 user_info" />
    <property name="Pool.PingEnabled" value="false" />
    <property name="Pool.PingConnectionsOlderThan" value="1" />
    <property name="Pool.PingConnectionsNotUsedFor" value="1" />
    </dataSource>
    </transactionManager>
    <sqlMap resource="com/ibatis/test/User.xml" />
    </sqlMapConfig>
    ================================================test.java ==========================================package com.ibatis.test;import java.io.Reader;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map; import com.ibatis.common.resources.Resources;
    import com.ibatis.sqlmap.client.SqlMapClient;
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;
    import com.idosoft.utils.DateUtils;
     public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    String resource ="com/ibatis/test/SqlMapConfig.xml";
    Reader reader;
    SqlMapClient sqlMap= null ;
    try{
    reader = Resources.getResourceAsReader(resource);
    //XmlSqlMapClientBuilder xmlBuilder =
    //new XmlSqlMapClientBuilder();
    sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); 
    //SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);
    //sqlMap系统初始化完毕,开始执行update操作
     
     
    Map m = new Map();
                    //设置需要的参数
    List l = sqlMap.queryForList("testSql",m);
                    System.out.println("over time:"+DateUtils.getCurrDate("yyyy-MM-dd HH:mm:ss"));
    sqlMap.commitTransaction();
    } catch ( Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

    }
    finally{
    try {
    sqlMap.endTransaction();

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    ===============================
      

  2.   

    ibatis和SPRING集成后就可以很方便的访问你的JNDI的DATASOUCE例子去看看spring的Reference
      

  3.   


       楼上正解,用spring和ibatis很方便就能获得连接,事务也很好控制。。
      

  4.   

    可以用来管理事务,参看官方文档http://ibatis.apache.org/docs/java/user/ 
    DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader);
     PersonDao personDao = daoManager.getDao(PersonDao.class);//反射生成dao personDao.insertPerson (person); // Starts transaction
     person.setLastName("Begin");
     personDao.updatePerson (person); // Starts a new transaction
      

  5.   


    package com.ibatis.test;import java.io.Reader;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map; import com.ibatis.common.resources.Resources;
    import com.ibatis.sqlmap.client.SqlMapClient;
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;
    import com.idosoft.utils.DateUtils;
     public class Test {/**
    * @param args
    */
    public static void main(String[] args) {
    String resource ="com/ibatis/test/SqlMapConfig.xml";
    Reader reader;
    SqlMapClient sqlMap= null ;
    try{
    reader = Resources.getResourceAsReader(resource);
    //XmlSqlMapClientBuilder xmlBuilder =
    //new XmlSqlMapClientBuilder();
    sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);  
    //SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);
    //sqlMap系统初始化完毕,开始执行update操作
      
      
    Map m = new Map();
      //设置需要的参数
    List l = sqlMap.queryForList("testSql",m);
      System.out.println("over time:"+DateUtils.getCurrDate("yyyy-MM-dd HH:mm:ss"));
    sqlMap.commitTransaction();
    } catch ( Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();}
    finally{
    try {
    sqlMap.endTransaction();} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    学习