You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/11/29 22:44:58 UTC

svn commit: r721728 - in /ibatis/trunk/java/ibatis-3: ./ ibatis-3-core/src/main/java/org/apache/ibatis/api/ ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/ ibatis-3-core/src/main/java/org/apache/ibatis/builder/ ibatis-3-core/src/main/java/o...

Author: cbegin
Date: Sat Nov 29 13:44:57 2008
New Revision: 721728

URL: http://svn.apache.org/viewvc?rev=721728&view=rev
Log:
Implemented SqlMapperBuilder and SqlSession interface.

Added:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlMapperBuilder.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/SqlMapperBuilderTest.java
      - copied, changed from r721707, ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfigParserTest.java
Removed:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfigParserTest.java
Modified:
    ibatis/trunk/java/ibatis-3/TODO
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlMapper.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlMapper.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperConfigParser.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/jdbc/JdbcTransaction.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/managed/ManagedTransactionFactory.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Sat Nov 29 13:44:57 2008
@@ -10,7 +10,18 @@
  * Transaction Manager (REAL AutoCommit support...)
  * Mapper Interface Binding
  * Client / Mapper Factory
+ * Exception hierarchy returned from exceptionfactory
 
 Testing
  * Functional tests
  * Perf/Threaded Integration Tests
+
+Logging
+//  private static final Log log = LogFactory.getLog(BaseExecutor.class);
+//    if (log.isDebugEnabled()) {
+//      this.connection = ConnectionLogger.newInstance(connection);
+//    } else {
+//      this.connection = connection;
+//    }
+
+

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlMapper.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlMapper.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlMapper.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlMapper.java Sat Nov 29 13:44:57 2008
@@ -1,7 +1,15 @@
 package org.apache.ibatis.api;
 
+import org.apache.ibatis.mapping.Configuration;
+
+import java.sql.Connection;
+
 public interface SqlMapper {
 
   SqlSession openSession();
+  
+  SqlSession openSession(Connection connection);
+
+  Configuration getConfiguration();
 
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/SqlSession.java Sat Nov 29 13:44:57 2008
@@ -1,4 +1,15 @@
 package org.apache.ibatis.api;
 
+import org.apache.ibatis.executor.result.ResultHandler;
+
+import java.util.List;
+
 public interface SqlSession {
+
+  List selectList(String statement);
+  List selectList(String statement, Object parameter);
+  List selectList(String statement, Object parameter, int offset, int limit);
+  List selectList(String statement, Object parameter, int offset, int limit, ResultHandler handler);
+  void close();
+  
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlMapper.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlMapper.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlMapper.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlMapper.java Sat Nov 29 13:44:57 2008
@@ -44,4 +44,10 @@
     return new DefaultSqlSession(configuration, executor);
   }
 
+  public Configuration getConfiguration() {
+    return configuration;
+  }
+
+
 }
+

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/api/defaults/DefaultSqlSession.java Sat Nov 29 13:44:57 2008
@@ -3,6 +3,7 @@
 import org.apache.ibatis.api.SqlSession;
 import org.apache.ibatis.api.exceptions.ExceptionFactory;
 import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.executor.result.ResultHandler;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.Configuration;
 
@@ -11,25 +12,56 @@
 
 public class DefaultSqlSession implements SqlSession {
 
+  private boolean commitRequired;
+
   private Configuration configuration;
   private Executor executor;
 
   public DefaultSqlSession(Configuration configuration, Executor executor) {
     this.configuration = configuration;
     this.executor = executor;
+    this.commitRequired = false;
+  }
+
+  public List selectList(String statement) {
+    return selectList(statement, null);
+  }
+
+  public List selectList(String statement, Object parameter) {
+    return selectList(statement, parameter, Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT);
   }
 
-  public List query(String statement) {
-    return query(statement, null);
+  public List selectList(String statement, Object parameter, int offset, int limit) {
+    return selectList(statement, parameter, offset, limit, Executor.NO_RESULT_HANDLER);
   }
 
-  public List query(String statement, Object parameter) {
+  public List selectList(String statement, Object parameter, int offset, int limit, ResultHandler handler) {
     try {
-      MappedStatement ms = configuration.getMappedStatement("com.domain.AuthorMapper.selectAllAuthors");
-      return executor.query(ms, parameter , Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT, Executor.NO_RESULT_HANDLER);
+      MappedStatement ms = configuration.getMappedStatement(statement);
+      return executor.query(ms, parameter , offset, limit, handler);
     } catch (SQLException e) {
       throw ExceptionFactory.wrapSQLException("Error querying database.  Cause: " + e, e);
     }
   }
 
+  public void close() {
+    executor.close();
+  }
+
+  public void commit() {
+    try {
+      executor.commit(false);
+    } catch (SQLException e) {
+      throw ExceptionFactory.wrapSQLException("Error committing transaction.  Cause: " + e, e);
+    }
+  }
+
+  public void rollback() {
+    try {
+      executor.rollback(false);
+    } catch (SQLException e) {
+      throw ExceptionFactory.wrapSQLException("Error rolling back transaction.  Cause: " + e, e);
+    }
+  }
+
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperConfigParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperConfigParser.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperConfigParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperConfigParser.java Sat Nov 29 13:44:57 2008
@@ -15,14 +15,26 @@
 
 public class MapperConfigParser extends BaseParser {
 
+  private boolean parsed;
+
   protected Reader reader;
   protected NodeletParser parser;
 
   private String environment;
   private Environment.Builder environmentBuilder;
 
-  public MapperConfigParser(Reader reader, Properties props) {
+  public MapperConfigParser(Reader reader) {
+    this(reader,null,null);
+  }
+
+  public MapperConfigParser(Reader reader, String environment) {
+    this(reader,environment,null);
+  }
+
+  public MapperConfigParser(Reader reader, String environment, Properties props) {
+    this.parsed = false;
     this.reader = reader;
+    this.environment = environment;
 
     this.configuration = new Configuration();
     this.configuration.setVariables(props);
@@ -36,16 +48,17 @@
     this.parser.setEntityResolver(new MapperEntityResolver());
   }
 
-  public void parse() {
+  public Configuration parse() {
     assert reader != null;
     assert parser != null;
     assert configuration != null;
     assert typeAliasRegistry != null;
     assert typeHandlerRegistry != null;
+    if (parsed) {
+      throw new BuilderException("Each MapperConfigParser can only be used once.");
+    }
+    parsed = true;
     parser.parse(reader);
-  }
-
-  public Configuration getConfiguration() {
     return configuration;
   }
 

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlMapperBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlMapperBuilder.java?rev=721728&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlMapperBuilder.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlMapperBuilder.java Sat Nov 29 13:44:57 2008
@@ -0,0 +1,26 @@
+package org.apache.ibatis.builder;
+
+import org.apache.ibatis.mapping.Configuration;
+import org.apache.ibatis.api.defaults.DefaultSqlMapper;
+import org.apache.ibatis.api.SqlMapper;
+
+import java.io.Reader;
+import java.util.Properties;
+
+public class SqlMapperBuilder {
+
+  public SqlMapper build(Reader reader) {
+    return build(reader,null,null);
+  }
+
+  public SqlMapper build(Reader reader, String environment) {
+    return build(reader,environment,null);
+  }
+
+  public SqlMapper build(Reader reader, String environment, Properties props) {
+    MapperConfigParser parser = new MapperConfigParser(reader,environment,props);
+    Configuration config = parser.parse();
+    return new DefaultSqlMapper(config);
+  }
+  
+}

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java Sat Nov 29 13:44:57 2008
@@ -13,8 +13,7 @@
 import java.util.*;
 
 public abstract class BaseExecutor implements Executor {
-
-  private static final Log log = LogFactory.getLog(BaseExecutor.class);
+  
   private static final Object EXECUTION_PLACEHOLDER = new Object();
 
   protected final Transaction transaction;
@@ -27,11 +26,6 @@
   protected List<BatchResult> batchResults = new ArrayList<BatchResult>();
 
   protected BaseExecutor(Transaction transaction) {
-//    if (log.isDebugEnabled()) {
-//      this.connection = ConnectionLogger.newInstance(connection);
-//    } else {
-//      this.connection = connection;
-//    }
     this.transaction = transaction;
     this.deferredLoads = new ArrayList<DeferredLoad>();
     this.localCache = new PerpetualCache("LocalCache");

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/jdbc/JdbcTransaction.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/jdbc/JdbcTransaction.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/jdbc/JdbcTransaction.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/jdbc/JdbcTransaction.java Sat Nov 29 13:44:57 2008
@@ -1,6 +1,7 @@
 package org.apache.ibatis.transaction.jdbc;
 
 import org.apache.ibatis.transaction.Transaction;
+import org.apache.ibatis.api.exceptions.ExceptionFactory;
 
 import java.sql.Connection;
 import java.sql.SQLException;

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/managed/ManagedTransactionFactory.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/managed/ManagedTransactionFactory.java?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/managed/ManagedTransactionFactory.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/transaction/managed/ManagedTransactionFactory.java Sat Nov 29 13:44:57 2008
@@ -13,6 +13,7 @@
   }
 
   public Transaction newTransaction(Connection conn) {
+
     return new ManagedTransaction(conn);
   }
 

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml?rev=721728&r1=721727&r2=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml Sat Nov 29 13:44:57 2008
@@ -6,7 +6,7 @@
 
 <configuration>
 
-  <properties resource="org/apache/ibatis/builder/mapper.properties"> <!-- url="" -->
+  <properties resource="org/apache/ibatis/builder/mapper.properties">
     <property name="driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
   </properties>
 

Copied: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/SqlMapperBuilderTest.java (from r721707, ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfigParserTest.java)
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/SqlMapperBuilderTest.java?p2=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/SqlMapperBuilderTest.java&p1=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfigParserTest.java&r1=721707&r2=721728&rev=721728&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfigParserTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/SqlMapperBuilderTest.java Sat Nov 29 13:44:57 2008
@@ -3,48 +3,29 @@
 import org.junit.Test;
 import org.junit.Assert;
 import org.apache.ibatis.BaseDataTest;
-import org.apache.ibatis.api.SqlMapper;
-import org.apache.ibatis.api.defaults.DefaultSqlMapper;
-import org.apache.ibatis.executor.Executor;
-import org.apache.ibatis.transaction.TransactionFactory;
-import org.apache.ibatis.transaction.Transaction;
-import org.apache.ibatis.mapping.Configuration;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.mapping.Environment;
+import org.apache.ibatis.api.*;
 import org.apache.ibatis.io.Resources;
 
-import javax.sql.DataSource;
 import java.io.Reader;
 import java.util.List;
 
 import domain.blog.Author;
 
-public class MapperConfigParserTest extends BaseDataTest {
+public class SqlMapperBuilderTest extends BaseDataTest {
 
   @Test
   public void shouldBuildBlogMappers() throws Exception {
     createBlogDataSource();
     final String resource = "org/apache/ibatis/builder/MapperConfig.xml";
     final Reader reader = Resources.getResourceAsReader(resource);
-    MapperConfigParser parser = new MapperConfigParser(reader,null);
-    parser.parse();
-    Configuration config = parser.getConfiguration();
-
-    SqlMapper sqlMapper = new DefaultSqlMapper(config);
-
-    Environment environment = config.getEnvironment();
-    DataSource ds = environment.getDataSource();
-    TransactionFactory tf = environment.getTransactionFactory();
-    Transaction tx = tf.newTransaction(ds.getConnection());
-    Executor exec = config.newExecutor(tx);
-    MappedStatement ms = config.getMappedStatement("com.domain.AuthorMapper.selectAllAuthors");
-    List<Author> authors = exec.query(ms,null,Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT, Executor.NO_RESULT_HANDLER);
-
-    for (Author author : authors) {
-      System.out.println(author);
+    SqlMapper sqlMapper = new SqlMapperBuilder().build(reader);
+    SqlSession session = sqlMapper.openSession();
+    try {
+      List<Author> authors = session.selectList("com.domain.AuthorMapper.selectAllAuthors");
+      Assert.assertEquals(2,authors.size());
+    } finally {
+      session.close();
     }
-
-    Assert.assertEquals(2,authors.size());
   }
 
 }