探索Mybatis核心组件及生命周期

探索Mybatis核心组件及生命周期,第1张

探索Mybatis核心组件及生命周期 核心部件
  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession
1.SqlSessionFactoryBuilder

作用:通过加载和渲染配置项,创建SqlSessionFacroty。
所以该类的实例在创建完SqlSessionFacroty之后基本就没用了,所以不要采用全局变量来保存这个类的实例。

// 这是官网的一个实例
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

构建SqlSessionFactory既可以使用xml配置文件,也可以直接使用java代码,但更推荐使用xml,修改起来比较方便,而且复用程度也很高。

2.SqlSessionFacroty

作用:用来创建SqlSession,其中SqlSession并不是线程安全的,所以几乎每一次请求都要创建一个实例,所以SqlSessionFacroty的实例在整个应用运行期间会被一直使用,所以这个类的实例一般采用单例保存起来备用。

每一次使用时都重新创建一个不可以吗?如果不考虑性能,貌似也没有太大毛病,而且官网也指出多次创建该类实例并不推荐。

//构建SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
  //方式一
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
  //方式二
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

除此之外还有另外一种不采用xml的写法:

//方式三
package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERe id = #{id}")
  Blog selectBlog(int id);
}

说真的,这种不分离的写法,随着代码量的增加,真的很混乱,所以建议更规范的使用方式二中的方式。

3.SqlSession

作用:这就是你执行sql的类。
在web服务器中,每一次请求都会生成一个用户线程,而且该类实例并不是线程安全,所以该类的实例应该是线程独占的;每一次使用完毕都应该及时关闭该类实例。

使用方式见2.SqlSessionFactory吧。

总结

整体看Mybatis核心的组件只有这三个,其中SqlSession是需要经常打交道的一个,在项目中编写sql时会经常编写xml配置文件,接下来将全面的介绍xml文件的配置。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5637464.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存