当我们使用MyBatis框架时,SqlSessionFactory和SqlSession是其中两个非常重要的类,下面我来一一解释它们的作用和用法。
SqlSessionFactory
SqlSessionFactory是MyBatis中用来创建SqlSession的工厂类。它的主要作用是提供一个数据库连接的配置信息和创建SqlSession的方式。在使用MyBatis时,我们一般通过以下方式来获取SqlSessionFactory的实例:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
在这段代码中,我们首先通过Resources.getResourceAsStream()方法读取MyBatis配置文件mybatis-config.xml,然后通过SqlSessionFactoryBuilder().build(inputStream)创建SqlSessionFactory的实例。
SqlSessionFactory的创建过程会比较耗时,因此一般情况下我们会在应用程序初始化时创建一次SqlSessionFactory的实例,并将其保存在全局变量中供后续使用。
SqlSession
SqlSession是MyBatis中和数据库交互的主要类。每个SqlSession实例都绑定了一个数据库连接,它提供了执行SQL语句、提交事务、获取Mapper等一系列与数据库交互相关的方法。
在使用SqlSession前,我们首先需要获取它的实例。一般情况下,我们可以通过SqlSessionFactory的openSession()方法来获取SqlSession的实例,如下所示:
SqlSession sqlSession = sqlSessionFactory.openSession();
如果我们想要获取到一个自动提交事务的SqlSession实例,可以使用SqlSessionFactory的openSession(true)方法,如下所示:
SqlSession sqlSession = sqlSessionFactory.openSession(true);
SqlSession的使用过程中,我们可以执行SQL语句,如下所示:
User user = sqlSession.selectOne("com.example.UserMapper.selectUserById", 1);
这段代码的作用是根据用户ID查询用户信息。其中,第一个参数com.example.UserMapper.selectUserById就是一个Mapper中的SQLID,第二个参数1是传递给SQL语句的参数,同时也可以通过指定ParameterType来将多个参数封装成一个JavaBean传递给SQL语句。
除了执行SQL语句,我们还可以通过SqlSession的commit()和rollback()方法提交或回滚事务,如下所示:
try {
sqlSession.update("com.example.UserMapper.updateUser", user);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
throw e;
} finally {
sqlSession.close();
}
这段代码的作用是更新用户信息,并提交事务。如果在更新用户信息的过程中发生异常,我们将回滚事务,并通过throw e将异常抛出。最后,我们还需要记得关闭SqlSession。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于MyBatis中SqlSessionFactory和SqlSession简解 - Python技术站