首先从官方文档入手,明白mybatis使用场景是什么
mybatis为ORM框架,主要解决关系映射问题,实际就是对JDBC操作的封装
所以可以得知mybatis需要解决几个问题1、数据库连接;2、domain对象映射sql;3、sql语句构建;
mybatis中主要的几个对象:
mybatis是以SqlSessionFactory实例为中心
关系:SqlSessionFactoryBuilder—>SqlSessionFactory—>SqlSession
SqlSessionFactoryBuilder构建SqlSessionFactory
SqlSessionFactoryBuilder可通过Configuration、XML等方式创建
SqlSessionFactory获取SqlSession,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
SqlSessionFactoryBuilder
构建类,用来构建SqlSessionFactory,构建完后就不需要存在了,最佳作用域是方法作用域(也就是局部方法变量),可通过Configuration、XML等方式创建SqlSessionFactory工厂类,用来创建SqlSession,所以需要在应用运行期内一直存在。最佳作用域是应用作用域。最好用单例或静态单例模式存在,只需要存在一个。所以这个类适合配置在spring中
SqlSessionSqlSession
完全包含了面向数据库执行 SQL 命令所需的所有方法,每执行一条SQL都会结合映射器(mapper)创建一个新的sqlsession。每个线程都应该有它自己的 SqlSession 实例。
SqlSession
的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。每执行完就需要执行session.close()关闭
Mappper
映射器是一个你创建来绑定你映射的语句的接口。映射器接口的实例是从 SqlSession 中获得的。因此从技术层面讲,任何映射器实例的最大作用域是和请求它们的 SqlSession 相同的。