1.mybatis的执行流程:
2.mybatis核心对象的生命周期:
1)SqlSessionFactoryBuiler:它是用来构建 SqlSessionFactory 的,而SqlSessionFactory 只需要一个,所以只要构建了这一个 SqlSessionFactory,它的使命就完成了,也就没有存在的意义了。所以它的生命周期只存在于方法的局部。
2)SqlSessionFactory:SqlSessionFactory 是用来创建 SqlSession 的,每次应用程序访问数据库,都需要创建一个会话。因为我们一直有创建会话的需要,所以 SqlSessionFactory 应该存在于应用的整个生命周期中(作用域是应用作用域)。创建 SqlSession 只需要一个实例来做这件事就行了,否则会产生很多的混乱,和浪费资源。所以我们要采用单例模式。
3)SqlSession:SqlSession 是一个会话,因为它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个 SqlSession 对象,在请求结束或者说方法执行完毕的时候要及时关闭它(一次请求或者操作中)。
4)Mapper:Mapper(实际上是一个代理对象)是从 SqlSession 中获取的。BlogMapper mapper = session.getMapper(BlogMapper.class);---》它的作用是发送 SQL 来操作数据库的数据。它应该在一个 SqlSession 事务方法之内。
3.mybatis核心配置:
1)typeHandlers:由于 Java 类型和数据库的 JDBC 类型不是一一对应的(比如 String 与 varchar),所以我们把 Java 对象转换为数据库的值,和把数据库的值转换成 Java 对象,需要经过一定的转换,这两个方向的转换就要用到 TypeHandler。
2)objectFactory:当我们把数据库返回的结果集转换为实体类的时候,需要创建对象的实例,由于我们不知道需要处理的类型是什么,有哪些属性,所以不能用 new 的方式去创建。在MyBatis 里面,它提供了一个工厂类的接口,叫做 ObjectFactory,专门用来创建对象实例。