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

Mybatis——SqlSessionFactoryBuilder工厂模式

时间:2024-10-08 11:53:43浏览次数:3  
标签: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批量插入MyBatis插入数据的方法有几种:for循环,每次都重新连接一次数据库,每次只插入一条数据。在编写sql时用foreach标签,建立一次数据库连接。使用MyBatis的batchInsert方法。下面是方法1和2的对比:在数据量较少的时候,比如几十条,可以使用方......
  • Mybatis-flex代替繁琐的JPA
    1.前言最近在新的SpringBoot项目中采用JPA来作为数据库的持久层。刚开始得益于Spring框架自带,IDEA也有丰富的支持;可以自行匹配数据库字段,接口中方法可以直接提示,支持JPQL,原生SQL等方式。写起来也是非常顺手。但是当业务中有一些复杂一点的需求,在JPA中实现就非常麻烦,且不直观。......
  • 【2024计算机毕业设计】基于jsp+mysql+Spring+mybatis的SSM药品进货销售仓储信息管理
    运行环境:最好是javajdk1.8,我在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本tomcat服务器环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7......
  • MyBatis快速入门
    一、简介MyBatis是一个优秀的基于ORM的半自动轻量级持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码ORM(ObjectRelationalMap......
  • mybatis xml里的 resultMap、resultOrdered、resultSets、resultSetType、resultType
    在MyBatis中,映射结果集是一项重要的功能,用于将数据库查询结果映射到Java对象中。为了实现这一功能,MyBatis提供了多个配置选项,如resultMap、resultOrdered、resultSets、resultSetType和resultType。以下是这些配置选项的详细解释及示例:1.resultTyperesultType是最简单的结......
  • 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)
    七,MyBatis-Plus扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)@目录七,MyBatis-Plus扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)1.乐观锁2.代码生成器3.执行SQL分析打印4.总结:5.最后:1.乐观锁首先我们需要先了解开发中的一个常见场景,叫做并发请求。并......
  • 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......
  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
    五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)文章目录五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1.ActiveRecord模式2.ActiveRecord介绍2.1ActiveRecord实现3.SimpleQuery工具类3.1SimpleQuer......
  • 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
    五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)@目录五,MyBatis-Plus当中的“ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1.ActiveRecord模式2.ActiveRecord介绍2.1ActiveRecord实现3.SimpleQuery工具类3.1SimpleQuery介绍3.2list......