View Javadoc
1   /**
2    *    Copyright 2009-2015 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.apache.ibatis.session;
17  
18  import java.io.Closeable;
19  import java.sql.Connection;
20  import java.util.List;
21  import java.util.Map;
22  
23  import org.apache.ibatis.executor.BatchResult;
24  
25  /**
26   * The primary Java interface for working with MyBatis.
27   * Through this interface you can execute commands, get mappers and manage transactions.
28   *
29   * @author Clinton Begin
30   */
31  public interface SqlSession extends Closeable {
32  
33    /**
34     * Retrieve a single row mapped from the statement key
35     * @param <T> the returned object type
36     * @param statement
37     * @return Mapped object
38     */
39    <T> T selectOne(String statement);
40  
41    /**
42     * Retrieve a single row mapped from the statement key and parameter.
43     * @param <T> the returned object type
44     * @param statement Unique identifier matching the statement to use.
45     * @param parameter A parameter object to pass to the statement.
46     * @return Mapped object
47     */
48    <T> T selectOne(String statement, Object parameter);
49  
50    /**
51     * Retrieve a list of mapped objects from the statement key and parameter.
52     * @param <E> the returned list element type
53     * @param statement Unique identifier matching the statement to use.
54     * @return List of mapped object
55     */
56    <E> List<E> selectList(String statement);
57  
58    /**
59     * Retrieve a list of mapped objects from the statement key and parameter.
60     * @param <E> the returned list element type
61     * @param statement Unique identifier matching the statement to use.
62     * @param parameter A parameter object to pass to the statement.
63     * @return List of mapped object
64     */
65    <E> List<E> selectList(String statement, Object parameter);
66  
67    /**
68     * Retrieve a list of mapped objects from the statement key and parameter,
69     * within the specified row bounds.
70     * @param <E> the returned list element type
71     * @param statement Unique identifier matching the statement to use.
72     * @param parameter A parameter object to pass to the statement.
73     * @param rowBounds  Bounds to limit object retrieval
74     * @return List of mapped object
75     */
76    <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds);
77  
78    /**
79     * The selectMap is a special case in that it is designed to convert a list
80     * of results into a Map based on one of the properties in the resulting
81     * objects.
82     * Eg. Return a of Map[Integer,Author] for selectMap("selectAuthors","id")
83     * @param <K> the returned Map keys type
84     * @param <V> the returned Map values type
85     * @param statement Unique identifier matching the statement to use.
86     * @param mapKey The property to use as key for each value in the list.
87     * @return Map containing key pair data.
88     */
89    <K, V> Map<K, V> selectMap(String statement, String mapKey);
90  
91    /**
92     * The selectMap is a special case in that it is designed to convert a list
93     * of results into a Map based on one of the properties in the resulting
94     * objects.
95     * @param <K> the returned Map keys type
96     * @param <V> the returned Map values type
97     * @param statement Unique identifier matching the statement to use.
98     * @param parameter A parameter object to pass to the statement.
99     * @param mapKey The property to use as key for each value in the list.
100    * @return Map containing key pair data.
101    */
102   <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);
103 
104   /**
105    * The selectMap is a special case in that it is designed to convert a list
106    * of results into a Map based on one of the properties in the resulting
107    * objects.
108    * @param <K> the returned Map keys type
109    * @param <V> the returned Map values type
110    * @param statement Unique identifier matching the statement to use.
111    * @param parameter A parameter object to pass to the statement.
112    * @param mapKey The property to use as key for each value in the list.
113    * @param rowBounds  Bounds to limit object retrieval
114    * @return Map containing key pair data.
115    */
116   <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds);
117 
118   /**
119    * Retrieve a single row mapped from the statement key and parameter
120    * using a {@code ResultHandler}.
121    * @param statement Unique identifier matching the statement to use.
122    * @param parameter A parameter object to pass to the statement.
123    * @param handler ResultHandler that will handle each retrieved row
124    * @return Mapped object
125    */
126   void select(String statement, Object parameter, ResultHandler handler);
127 
128   /**
129    * Retrieve a single row mapped from the statement
130    * using a {@code ResultHandler}.
131    * @param statement Unique identifier matching the statement to use.
132    * @param handler ResultHandler that will handle each retrieved row
133    * @return Mapped object
134    */
135   void select(String statement, ResultHandler handler);
136 
137   /**
138    * Retrieve a single row mapped from the statement key and parameter
139    * using a {@code ResultHandler} and {@code RowBounds}
140    * @param statement Unique identifier matching the statement to use.
141    * @param rowBounds RowBound instance to limit the query results
142    * @param handler ResultHandler that will handle each retrieved row
143    * @return Mapped object
144    */
145   void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);
146 
147   /**
148    * Execute an insert statement.
149    * @param statement Unique identifier matching the statement to execute.
150    * @return int The number of rows affected by the insert.
151    */
152   int insert(String statement);
153 
154   /**
155    * Execute an insert statement with the given parameter object. Any generated
156    * autoincrement values or selectKey entries will modify the given parameter
157    * object properties. Only the number of rows affected will be returned.
158    * @param statement Unique identifier matching the statement to execute.
159    * @param parameter A parameter object to pass to the statement.
160    * @return int The number of rows affected by the insert.
161    */
162   int insert(String statement, Object parameter);
163 
164   /**
165    * Execute an update statement. The number of rows affected will be returned.
166    * @param statement Unique identifier matching the statement to execute.
167    * @return int The number of rows affected by the update.
168    */
169   int update(String statement);
170 
171   /**
172    * Execute an update statement. The number of rows affected will be returned.
173    * @param statement Unique identifier matching the statement to execute.
174    * @param parameter A parameter object to pass to the statement.
175    * @return int The number of rows affected by the update.
176    */
177   int update(String statement, Object parameter);
178 
179   /**
180    * Execute a delete statement. The number of rows affected will be returned.
181    * @param statement Unique identifier matching the statement to execute.
182    * @return int The number of rows affected by the delete.
183    */
184   int delete(String statement);
185 
186   /**
187    * Execute a delete statement. The number of rows affected will be returned.
188    * @param statement Unique identifier matching the statement to execute.
189    * @param parameter A parameter object to pass to the statement.
190    * @return int The number of rows affected by the delete.
191    */
192   int delete(String statement, Object parameter);
193 
194   /**
195    * Flushes batch statements and commits database connection.
196    * Note that database connection will not be committed if no updates/deletes/inserts were called.
197    * To force the commit call {@link SqlSession#commit(boolean)}
198    */
199   void commit();
200 
201   /**
202    * Flushes batch statements and commits database connection.
203    * @param force forces connection commit
204    */
205   void commit(boolean force);
206 
207   /**
208    * Discards pending batch statements and rolls database connection back.
209    * Note that database connection will not be rolled back if no updates/deletes/inserts were called.
210    * To force the rollback call {@link SqlSession#rollback(boolean)}
211    */
212   void rollback();
213 
214   /**
215    * Discards pending batch statements and rolls database connection back.
216    * Note that database connection will not be rolled back if no updates/deletes/inserts were called.
217    * @param force forces connection rollback
218    */
219   void rollback(boolean force);
220 
221   /**
222    * Flushes batch statements.
223    * @return BatchResult list of updated records
224    * @since 3.0.6
225    */
226   List<BatchResult> flushStatements();
227 
228   /**
229    * Closes the session
230    */
231   @Override
232   void close();
233 
234   /**
235    * Clears local session cache
236    */
237   void clearCache();
238 
239   /**
240    * Retrieves current configuration
241    * @return Configuration
242    */
243   Configuration getConfiguration();
244 
245   /**
246    * Retrieves a mapper.
247    * @param <T> the mapper type
248    * @param type Mapper interface class
249    * @return a mapper bound to this SqlSession
250    */
251   <T> T getMapper(Class<T> type);
252 
253   /**
254    * Retrieves inner database connection
255    * @return Connection
256    */
257   Connection getConnection();
258 }