MyBatis的核心对象

在使用 MyBatis 框架时,主要涉及两个核心对象:SqlSessionFactorySqlSession,它们MyBatis 框架中起着至关重要的作用

SqlSessionFactory
是对单个数据库映射关系经过编译后的内存镜象。其主要作用是创建SqlSessionSqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过 XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
在这里插入图片描述
SqISessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在 如果我们多次地创建同一个数据库的SqlSessionFactory ,那么此数据库的资源将很容易被耗尽,为了解决此问题,通常每一个数据库都会只对应一个SqlSessionFactory ,所以在构建 SqlSessionFactory实例时,建议使用单列模式。

SqlSession

SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操
作的一个单线程对象,其主要作用是执行持久化操作。SqlSession 对象包含了数据库中所有执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。
每一个线程都应该有一个自己的SqlSession 实例,并且该实例是不能被共享的。同时,SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中, 绝不能将其放在一个类的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象之后,要及时地关闭它,通常可以将其放在finally块中关闭,代码如下所示:

SqlSession sqlSession = sqlSessionFactory.openSession();
try {
       // 此处执行持久化操作
} finally {
      sqlSession.close();
}

SqlSessio对象当中包含了很多的方法:如下所示:

查询方法
最常用的就是selectList方法。通过SqlSession对象点方法名,传入参数。

  • <T> T selectOne(String statement) 参数 statement 是在配置文件中定义的 <select> 元素的id使用该方法后,会返回执行SQL语句查询结果的一条泛型对象
  • <T> T selectOne(String statement, Object parameter) 参数 statement 是在配置文件中定义的 <selecb 元素的 id parameter 是查询所需的参数 使用该方法后,会返回执行 SQL 语句查询结果的一条泛型对象
  • <E> List<E> selectList(String statement); 参数statement是在配置文件中定义的<select> 元素的 id 使用该方法后,会返回执行 SOL 语句查询结果的泛型对象的集合
  • <E> List<E> selectList(String statement, Object parameter);参数 statement 是在配置文件中定义的 <selecb 元素的 id parameter 是查询所需的参数 使用该方法后,会返回执行SQL语句查询结果的泛型对象的集合
  • <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds);参数statement 是在配置文件中定义的 元素的 id parameter 是查询所需的参数,rowBounds 是用于分页的参数对象 使用该方法后,会返回执行SQL语句查询结果的泛型对象的集合
  • void select(String statement, Object parameter, ResultHandler handler);参数 statement 是在配置文件中定义的 <selecb 元素的 id parameter 是查询所需的参数, ResultHandler 对象用于处理查询返回的复杂结果集,通常用于多表查询

插入、更新、删除方法

  • int insert(String statement);参数 statement 是在配置文件中定义<insert>元素的id使用该方法后,会返回执行SQL语句所影响的行数
  • int insert(String statement, Object parameter);参数 statement 是在配置文件中定义的 <insert>元素的 id parameter 是插入所需的参数使用该方法后,会返回执行SQL语句所影响的行数
  • int update(String statement);参数 statement 是在配置文件中定义的<update>元素的 id 使用该方法后,会返回执行SQL语句所影响的行数
  • int update(String statement, Object parameter);参数 statement 是在配置文件中定义的 <update>元素 id parameter 是更新所需的参数 使用该方法后,会返回执行SQL语句所影响的行数
  • int delete(String statement);参数 statement 是在配置文件中定义的<delete>元素 id 使用该方法后,会返回执行SQL语句所影响的行数
  • int delete(String statement, Object parameter);参数 statement 是在配置文件中定义的 <delete> 元素的 id parameter 是删除所需的参数 使用该方法后,会返回执行SQL语句所影响的行数

其他方法
在使用部分方法的时候再执行方法后,需要调用commit回滚事务这个方法,

  • void commit(); 提交事务的方法。
  • void rollback(); 回滚事务的方法。
  • void close(); 关闭SqlSession对象。
  • <T> T getMapper(Class<T> type); 返回Mapper接口的代理对象。
  • Connection getConnection(); 获取JDBC数据库连接对象的方法。

最后,我们通常将创建这一个类的对象进行抽离,使用工具类来进行创建:如下代码所示:

public class MybatisUtils {
	private static SqlSessionFactory sqlSessionFactory = null;
	static {
	try {
	   	Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
	    sqlSessionFactory =  new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
	    	e.printStackTrace();
              }
        }
	public static SqlSession getSession() {
		return sqlSessionFactory.openSession();
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值