9.1.2 SqlSession
SqlSession
是MyBatis
的关键对象,它是执行持久化操作的对象,类似于JDBC
中的Connection
。它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis
执行持久化操作的关键对象。SqlSession
对象完全包含以数据库为背景的所有执行SQL
操作的方法,它的底层封装了JDBC
连接,可以用SqlSession
实例来直接执行已映射的SQL
语句。
SqlSession要单独使用
每个线程都应该有它自己的SqlSession
实例。SqlSession
的实例不能被共享,也是线程不安全的,绝对不能将SqlSession
实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession
实例的引用放在任何类型的管理范围中比如Serlvet
当中的HttpSession
对象中。
SqlSession用完要关闭
使用完SqlSession
之后关闭Session
很重要,应该确保使用finally
块来关闭它.
SqlSession常用方法
SqlSession
的常用方法如下:
方法 | 描述 |
---|---|
int insert(String statement) |
插入方法,参数statement 是在配置文件中定义的insert 元素的`id,返回执行 SQL`语句所影响的行数。 |
int insert(String statement,Object parameter) |
插入方法,参数statement 是在配置文件中定义的insert 元素的id ,parameter 是插入所需的参数,通常是对象 或者Map ,返回执行SQL 语句所影响的行数。 |
int update(String statement) |
更新方法,参数statement 是在配置文件中定义的update 元素的id ,返回执行SQL 语句所影响的行数。 |
int update(String statement,Object parameter) |
更新方法,参数statement 是在配置文件中定义的update 元素的id ,parameter 是插入所需的参数,通常是对象 或者Map ,返回执行SQL 语句所影响的行数。 |
int delete(String statement) |
删除方法,参数statement 是在配置文件中定义的delete 元素的id 。返回执行SQL 语句所影响的行数。 |
int delete(String statement,Object parameter) |
删除方法,参数statement 是在配置文件中定义的delete 元素的id ,parameter 是插入所需的参数,通常是对象或者Map ,返回执行SQL 语句所影响的行数。 |
<T>T selectOne(String statement) |
查询方法,参数statement 是在配置文件中定义的select 元素的id 。返回执行SQL 语句查询结果的泛型对象,通常查询结果只有一条数据时才使用。 |
<T>T selectOne(String statement,Object parameter) |
查询方法,参数statement 是在配置文件中定义的select 元素的id ,parameter 是查询所需的参数,通常是对象或者Map ,返回执行SQL 语句查询结果的泛型对象,通常查询结果只有一条数据时才使用。 |
<E> List<E> selectList(String statement) |
查询方法,参数是在配置文件中定义的select 元素的id ,返回执行SQL 语句查询结果的泛型对象的集合。 |
<E> List<E> selectList(String statement,Object parameter) 。查询方法,参数statement 是在配置文件中定义的select 元素的id ,parameter 是查询所需的参数,通常是对象或者Map ,返回执行SQL 语句查询结果的泛型对象的集合。 |
|
<E> List<E> selectList(String statement,Object parameter ,RowBounds rowBounds) |
查询方法,参数statement 是在配置文件中定义的select 元素的id ,parameter 是查询所需的参数,通常是对象或者Map 。RowBounds 对象用于分页,它的两个属性:offset 指查询的当前页数;limit 指当前页显示多少条数据。返回执行SQL 语句查询结果的泛型对象的集合。 |
<K,V> Map<K,V> selectMap(String statement,String mapKey) |
查询方法,参数statement 是在配置文件中定义的select 元素的id ,mapKey 是返回数据的其中一个列名,执行SQL 语句查询的结果将会被封装成一个Map 集合返回,key 就是参数mapKey 传入的列名,value 是封装的对象。 |
<K,V> Map<K,V> selectMap(String statement,Object parameter,String mapKey) |
查询方法,参数statement 是在配置文件中定义的select 元素的id ,parameter 是查询所需的参数,通常是对象或者Map ,mapKey 是返回数据的其中一个列名,执行SQL 语句查询的结果将会被封装成一个Map 集合返回,key 就是参数mapKey 传入的列名,value 是封装的对象。 |
void select(String statement,ResultHandle rhandler) |
查询方法,参数statement 是在配置文件中定义的<select.../> 元素的id ,ResultHandler 对象用来处理查询返回的复杂结果集,通常用于多表查询。 |
void select(String statement,Object parameter,ResultHandler handler) |
查询方法,参数statement 是在配置文件中定义的select 元素的id ,parameter 是查询所需的参数,通常是对象或者Map ,ResultHandler 对象用来处理查询返回的复杂结果集,通常用于多表查询。 |
void commit() |
提交事务。 |
void rollback() |
回滚事务。 |
void close() |
关闭SqlSession 对象。 |
Connection getConnection() |
获得JDBC 的数据库连接对象。 |
<T>TgetMapper(Class<T>type) |
返回mapper 接口的代理对象,该对象关联了SqlSession 对象,开发者可以通过该对象直接调用方法操作数据库,参数type 是Mapper 的接口类型。MyBatis 官方手册建议通过mapper 对象访问MyBatis 。 |
## 提示 ## | |
在实际应用中很少会直接使用DriverManager 来获取数据库连接,通常都会使用DataSource 来获取数据库连接,SqlSessionFactory 底层封装了DataSource 。 |