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
的常用方法如下:
insert
方法 |
描述 |
int insert(String statement) |
- 插入方法,
- 参数statement是在配置文件(MyBatis XML Mapper)中定义的<insert>元素的id,
- 返回执行SQL语句所影响的行数。
|
int insert(String statement,Object parameter) |
- 插入方法,
- 参数statement是在配置文件中定义的<insert>元素的id,
- parameter是插入所需的参数,通常是
对象 或者Map, - 返回执行SQL语句所影响的行数。
|
update
方法 |
描述 |
int update(String statement) |
- 更新方法,
- 参数statement是在配置文件中定义的<update>元素的id,
- 返回执行SQL语句所影响的行数。
|
int update(String statement,Object parameter) |
- 更新方法,
- 参数statement是在配置文件中定义的<update>元素的id,
- parameter是插入所需的参数,通常是
对象 或者Map, - 返回执行SQL语句所影响的行数。
|
delete
方法 |
描述 |
int delete(String statement) |
- 删除方法,
- 参数statement是在配置文件中定义的<delete>元素的id。
- 返回执行SQL语句所影响的行数。
|
int delete(String statement,Object parameter) |
- 删除方法,
- 参数statement是在配置文件中定义的<delete>元素的id,
- parameter是插入所需的参数,
- 通常是对象或者Map,返回执行SQL语句所影响的行数。
|
select
selectOne
方法 |
描述 |
<T> T selectOne(String statement) |
- 查询方法,
- 参数statement是在配置文件中定义的<select>元素的id。
- 返回执行SQL语句查询结果的泛型对象,
- 通常查询结果只有一条数据时才使用。
|
<T> T selectOne(String statement,Object parameter) |
- 查询方法,
- 参数statement是在配置文件中定义的<select>元素的id,
- parameter是查询所需的参数,通常是对象或者Map,
- 返回执行SQL语句查询结果的泛型对象,
- 通常查询结果只有一条数据时才使用。
|
selectList
方法 |
描述 |
<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语句查询结果的泛型对象的集合。
|
selectMap 查询一列
方法 |
描述 |
<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> T getMapper(Class<T>type) |
返回mapper 接口的代理对象,该对象关联了SqlSession 对象,开发者可以通过该对象直接调用方法操作数据库,参数type 是Mapper 的接口类型。MyBatis 官方手册建议通过mapper 对象访问MyBatis 。 |
提示
在实际应用中很少会直接使用DriverManager
来获取数据库连接,通常都会使用DataSource
来获取数据库连接,SqlSessionFactory
底层封装了DataSource
。