当前位置: 首页 > news >正文

合肥建公司网站平台推广精准客源

合肥建公司网站,平台推广精准客源,汝州住房和城乡建设局网站,网站建设需要那些基础文章目录 三层架构一、基础支撑层1.1 类型转换模块1.2 日志模块1.3 反射工具模块1.4 Binding 模块1.5 数据源模块1.6 缓存模块1.6 解析器模块1.7 事务管理模块 二、核心处理层2.1 配置解析2.2 SQL 解析与 scripting 模块。2.3 MyBatis 中的 scripting 模块就是负责动态生成 SQL… 文章目录 三层架构一、基础支撑层1.1 类型转换模块1.2 日志模块1.3 反射工具模块1.4 Binding 模块1.5 数据源模块1.6 缓存模块1.6 解析器模块1.7 事务管理模块 二、核心处理层2.1 配置解析2.2 SQL 解析与 scripting 模块。2.3 MyBatis 中的 scripting 模块就是负责动态生成 SQL 的核心模块。2.4 SQL 执行2.5 插件 三、接口层 三层架构 MyBatis 分为三层架构分别是基础支撑层、核心处理层和接口层 一、基础支撑层 基础支撑层是整个 MyBatis 框架的地基为整个 MyBatis 框架提供了非常基础的功能其中每个模块都提供了一个内聚的、单一的能力MyBatis 基础支撑层按照这些单一的能力可以划分为上图所示的九个基础模块。 由于资源加载模块的功能非常简单使用频率也不高这里我就不介绍了你若感兴趣可以自行查阅相关资料去了解和学习。下面我就来简单描述这剩下的八个模块的基本功能在本课程第二个模块我还会带你详细分析这些基础模块的具体实现。 1.1 类型转换模块 在上一讲展示的订单系统实现中我们可以在 mybatis-config.xml 配置文件中通过 标签为一个类定义一个别名这里用到的“别名机制”就是由 MyBatis 基础支撑层中的类型转换模块实现的。 除了“别名机制”类型转换模块还实现了 MyBatis 中 JDBC 类型与 Java 类型之间的相互转换这一功能在绑定实参、映射 ResultSet 场景中都有所体现 在 SQL 模板绑定用户传入实参的场景中类型转换模块会将 Java 类型数据转换成 JDBC 类型数据 在将 ResultSet 映射成结果对象的时候类型转换模块会将 JDBC 类型数据转换成 Java 类型数据。 1.2 日志模块 日志是我们生产实践中排查问题、定位 Bug、锁定性能瓶颈的主要线索来源在任何一个成熟系统中都会有级别合理、信息翔实的日志模块MyBatis 也不例外。MyBatis 提供了日志模块来集成 Java 生态中的第三方日志框架该模块目前可以集成 Log4j、Log4j2、slf4j 等优秀的日志框架。 1.3 反射工具模块 Java 中的反射功能非常强大许多开源框架都会依赖反射实现一些相对灵活的需求但是大多数 Java 程序员在实际工作中很少会直接使用到反射技术。MyBatis 的反射工具箱是在 Java 反射的基础之上进行的一层封装为上层使用方提供更加灵活、方便的 API 接口同时缓存 Java 的原生反射相关的元数据提升了反射代码执行的效率优化了反射操作的性能 1.4 Binding 模块 在上一讲介绍的订单系统示例中我们可以通过 SqlSession 获取 Mapper 接口的代理然后通过这个代理执行关联 Mapper.xml 文件中的数据库操作。通过这种方式可以将一些错误提前到编译期该功能就是通过 Binding 模块完成的。 这里特别说明的是在使用 MyBatis 的时候我们无须编写 Mapper 接口的具体实现而是利用 Binding 模块自动生成 Mapper 接口的动态代理对象。有些简单的数据操作我们还可以直接在 Mapper 接口中使用注解完成连 Mapper.xml 配置文件都无须编写但如果 ResultSet 映射以及动态 SQL 非常复杂还是建议在 Mapper.xml 配置文件中维护会比较方便。 1.5 数据源模块 持久层框架核心组件之一就是数据源一款性能出众的数据源可以成倍提升系统的性能。MyBatis 自身提供了一套不错的数据源实现也是 MyBatis 的默认实现。另外在 Java 生态中就有很多优异开源的数据源可供选择MyBatis 的数据源模块中也提供了与第三方数据源集成的相关接口这也为用户提供了更多的选择空间提升了数据源切换的灵活性。 1.6 缓存模块 数据库是实践生成中非常核心的存储很多业务数据都会落地到数据库所以数据库性能的优劣直接影响了上层业务系统的优劣。我们很多线上业务都是读多写少的场景在数据库遇到瓶颈时缓存是最有效、最常用的手段之一如下图所示正确使用缓存可以将一部分数据库请求拦截在缓存这一层这就能够减少一部分数据库的压力提高系统性能。 除了使用 Redis、Memcached 等外置的第三方缓存以外持久化框架一般也会自带内置的缓存例如MyBatis 就提供了一级缓存和二级缓存具体实现位于基础支撑层的缓存模块中。 1.6 解析器模块 在上一讲的订单系统示例中我们可以看到 MyBatis 中有两大部分配置文件需要解析一个是 mybatis-config.xml 配置文件另一个是 Mapper.xml 配置文件。这两个文件都是由 MyBatis 的解析器模块进行解析的其中主要是依赖 XPath 实现 XML 配置文件以及各类表达式的高效解析。 1.7 事务管理模块 持久层框架一般都会提供一套事务管理机制实现数据库的事务控制MyBatis 对数据库中的事务进行了一层简单的抽象提供了简单易用的事务接口和实现。一般情况下Java 项目都会集成 Spring并由 Spring 框架管理事务。在后面的课程中我还会深入讲解 MyBatis 与 Spring 集成的原理其中就包括事务管理相关的集成。 二、核心处理层 介绍完 MyBatis 的基础支撑层之后我们再来分析 MyBatis 的核心处理层。 核心处理层是 MyBatis 核心实现所在其中涉及 MyBatis 的初始化以及执行一条 SQL 语句的全流程。下面我就针对核心处理层中的各部分实现进行介绍。 2.1 配置解析 我们知道MyBatis 有三处可以添加配置信息的地方分别是mybatis-config.xml 配置文件、Mapper.xml 配置文件以及 Mapper 接口中的注解信息。在 MyBatis 初始化过程中会加载这些配置信息并将解析之后得到的配置对象保存到 Configuration 对象中。 例如在订单系统示例中使用的 标签也就是自定义的查询结果集映射规则会被解析成 ResultMap 对象。我们可以利用得到的 Configuration 对象创建 SqlSessionFactory 对象也就是创建 SqlSession 对象的工厂对象之后即可创建 SqlSession 对象执行数据库操作了。 2.2 SQL 解析与 scripting 模块。 MyBatis 的最大亮点应该要数其动态 SQL 功能了只需要通过 MyBatis 提供的标签即可根据实际的运行条件动态生成实际执行的 SQL 语句。MyBatis 提供的动态 SQL 标签非常丰富包括 where 标签、if 标签、foreach 标签、set 标签等 2.3 MyBatis 中的 scripting 模块就是负责动态生成 SQL 的核心模块。 它会根据运行时用户传入的实参解析动态 SQL 中的标签并形成 SQL 模板然后处理 SQL 模板中的占位符用运行时的实参填充占位符得到数据库真正可执行的 SQL 语句。 2.4 SQL 执行 在 MyBatis 中要执行一条 SQL 语句会涉及非常多的组件比较核心的有Executor、StatementHandler、ParameterHandler 和 ResultSetHandler。 其中Executor 会调用事务管理模块实现事务的相关控制同时会通过缓存模块管理一级缓存和二级缓存。SQL 语句的真正执行将会由 StatementHandler 实现。那具体是怎么完成的呢StatementHandler 会先依赖 ParameterHandler 进行 SQL 模板的实参绑定然后由 java.sql.Statement 对象将 SQL 语句以及绑定好的实参传到数据库执行从数据库中拿到 ResultSet最后由 ResultSetHandler 将 ResultSet 映射成 Java 对象返回给调用方这就是 SQL 执行模块的核心。 下图展示了 MyBatis 执行一条 SQL 语句的核心过程 执行 SQL 语句的核心流程图 2.5 插件 很多成熟的开源框架都会以各种方式提供扩展能力。当框架原生能力不能满足某些场景的时候就可以针对这些场景实现一些插件来满足需求这样的框架才能有足够的生命力。这也是 MyBatis 插件接口存在的意义。 与此同时在实际应用的时候你也可以通过自定义插件来扩展 MyBatis或者改变 MyBatis 的默认行为。因为插件会影响 MyBatis 内核的行为所以在自定义插件之前你必须非常了解 MyBatis 内部的运行原理以避免写出不符合预期的插件引入一些诡异的功能 Bug 或性能问题。 三、接口层 接口层是 MyBatis 暴露给调用的接口集合这些接口都是使用 MyBatis 时最常用的一些接口例如SqlSession 接口、SqlSessionFactory 接口等。其中最核心的是 SqlSession 接口你可以通过它实现很多功能例如获取 Mapper 代理、执行 SQL 语句、控制事务开关等。
http://www.zqtcl.cn/news/957473/

相关文章:

  • 数据库型网站wordpress上传工具
  • 太原建站公司模板宁波seo公司哪家好
  • 电商网站都是用什么做的承接电商网站建设
  • c2c网站代表有哪些怎样制作个人网站
  • wordpress linux 建站安丘市建设局官方网站
  • 谁给个好网站硬件开发是什么
  • 海外网站加速器免费长春做网站优化哪家好
  • 建立网站需要多长钱电脑网页设计培训
  • 给网站划分栏目邢台做网站优化费用
  • 网群企业网站管理系统红塔区住房和城乡建设局网站
  • 濮阳网站建设在哪做沈阳百度网站的优点
  • 网站上如何做问卷调查温州建设局官方网站
  • 做一件代发哪个网站好具有品牌的福州网站建设
  • 邢台移动端网站建设犀牛建模教程
  • 华池网站建设广西柳州市
  • 泰安网站建设推荐软件商店电脑版官方下载
  • 站长平台网站报价单模板表格
  • 织梦做的网站老是被黑杭州网站设计询问蓝韵网络
  • wordpress手机版如何设置福鼎整站优化
  • 网站建设小程序定制开发北京东宏建设网站
  • 网站制作还花钱网站图怎么做
  • 免费搭网站wordpress minty
  • 海沧建设网站多少国外调色网站
  • 中企动力建站怎么样网站建设与设计的心得体会
  • 打开网站出现directoryj2ee做网站
  • 如何建设一个视频网站西安个人做网站
  • wordpress站群教程市场营销培训课程
  • 17网站一起做网店白沟简单网页制作图片
  • 网站建设项目需求分析流程做商业地产的网站
  • 百度建站商业网点的定义