9.1.2 SqlSession常用方法

9.1.2 SqlSession

SqlSessionMyBatis的关键对象,它是执行持久化操作的对象,类似于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对象,开发者可以通过该对象直接调用方法操作数据库,参数typeMapper的接口类型。MyBatis官方手册建议通过mapper对象访问MyBatis

提示

在实际应用中很少会直接使用DriverManager来获取数据库连接,通常都会使用DataSource来获取数据库连接,SqlSessionFactory底层封装了DataSource