首页 > 数据库 >Mybatis——SqlSessionFactoryBuilder工厂模式

Mybatis——SqlSessionFactoryBuilder工厂模式

时间:2024-10-08 11:53:43浏览次数:13  
标签:SqlSessionFactory 模式 工厂 build Mybatis SqlSessionFactoryBuilder

Mybatis——SqlSessionFactoryBuilder工厂模式

合集总览:Mybatis框架梳理   


说一下我的理解:设计模式是对项目工程中代码结构的设计和抽象,有了这种设计和抽象,系统才有了扩展性。记住了模式的角色、组成、UML类图,只是记住了模式的形,类似武术中的拳法套路。模式的意则是一个不断学习和加深理解的过程,通过对比优秀框架中相应设计模式的具体运用来加深理解,最终融入自己的设计和编码习惯中。
当然,如果关注点是代码能运行,也无可厚非。

工厂模式

工厂模式是将对象的创建和使用分离,对上层调用者来说屏蔽了复杂的对象创建过程,对代码维护来说集中了代码的管理,避免相同逻辑散落各处,一处修改,处处生效。
工厂模式是如何屏蔽创建过程的呢?在形式上,它将对象创建的逻辑定义在另一个类中,仅仅是这样的话,静态工具类也可以实现代码形式上的解耦和屏蔽。
工厂模式是通过抽象来实现分离的,或者说抽象是实现分离的惯用手段。提到抽象,首先想到的就是接口。接口仅定义规范和协议,从而满足了抽象。工厂模式通过返回接口从而实现了分离
比如Mybatis中的SqlSessionFactoryBuilder

public class SqlSessionFactoryBuilder {
  public SqlSessionFactory build(){}
}

这个类只做一件事,只有一个build方法,通过重载支持不同的入参情况。重点是通过返回接口类型,所以调用者才能不关心过程,仅关注返回对象的类型,从而实现概念上的屏蔽,实现解耦。
在这种情况下,调用者不仅不关心对象创建的过程,甚至不关心返回的是哪一类型的实例,只要返回的对象满足接口定义即可

题外话

稍微观察一下SqlSessionFactoryBuilder这个类,你会发现,目前版本中,该工厂只返回一种类型的实例DefaultSqlSessionFactory。虽然Mybatis内部SqlSessionFactory有两个实现类,但SqlSessionManager内部依旧是通过SqlSessionFactoryBuilder工厂创建DefaultSqlSessionFactory来返回:

public static SqlSessionManager newInstance(Reader reader) {
    return new SqlSessionManager(new SqlSessionFactoryBuilder().build(reader, null, null));
  }

所以在Mybatis中使用的SqlSessionFactory都是DefaultSqlSessionFactory类型。当然,由于SqlSessionFactoryBuilder并没有使用final修饰,你可以通过继承并覆写build来扩展自定义的SqlSessionFactory

标签:SqlSessionFactory,模式,工厂,build,Mybatis,SqlSessionFactoryBuilder
From: https://blog.csdn.net/wyy546792341/article/details/142739306

相关文章

  • MyBatis快速入门
    一、简介MyBatis是一个优秀的基于ORM的半自动轻量级持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码ORM(ObjectRelationalMap......
  • MyBatis-plus 3.5之前版本 处理存储json数据
    MyBatis-plus3.6之后支持集合泛型,不需要自定义TypeHandler当前使用的是MyBatis-plus3.5.2版本一:如果是支持对象,直接用MP内置的Handler,JacksonTypeHandler或FastjsonTypeHandler@TableField(typeHandler=FastjsonTypeHandler.class)//@TableField(typeHandler=JacksonTypeHa......
  • MyBatis拦截器
    一.JDBC的执行流程(面试题一)JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。原始的JDBC操作数据库主要有以下几个步骤:1.注册驱动使用Class.f......