一、什么是框架
1、1什么是框架
**框架(Framework)**是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为,框架是可被应用开发者定制的应用骨架。开发者可以根据自己的需求定制框架中的某些部分,或者在框架的基础上添加新的功能。实现个性化应用程序开发。
1、2为什么用框架
- 提高了开发效率和质量。可以利用框架中已经实现好的功能和模式,避免重复造轮子和出现常见的错误。
- 促进了代码的复用和标准化。开发者可以使用框架中提供的通用组件和接口,减少代码量和维护成本,同时也保证了代码风格和规范的一致性。
- 增强了应用程序的可扩展性和可维护性。开发者可以根据变化的需求轻松地修改或增加功能,而不影响框架本身或其他模块的稳定性。
1、3常用框架介绍
框架依据提供功能不同,可以简单划分为前端框架、web框架、ORM框架等。
早期比较主流的框架组合为SSH,是指使用struts/struts2,spring,hibernate
现行主流框架组合为SSM,是指使用springMVC,spring,MyBatis
以及目前核心开发框架spring boot
二、MyBatis框架
2、1什么是MyBatis
MyBatis本是apache的一个开源项目IBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。MyBatis是一个基于Java的持久层框架。当前,最新版本是MyBatis 3.5.11,其发布时间是2022年09月18日。
MyBatis官网:http://mybatis.org/
MyBatis官方文档:https://mybatis.org/mybatis-3/zh/
2、2MyBatis的作用
MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。
2、3MyBatis的优点和缺点
优点
- MyBatis 是免费且开源的。
- 与 JDBC 相比,减少了 50% 以上的代码量。
- MyBatis 是最简单的持久化框架,小巧并且简单易学。
- MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML 中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。
- 提供 XML 标签,支持编写动态 SQL 语句。
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
- 支持存储过程。MyBatis 以存储过程的形式封装 SQL,可以将业务逻辑保留在数据库之外,增强应用程序的可移植性、更易于部署和测试。
缺点
- 编写 SQL 语句工作量较大,对开发人员编写 SQL 语句的功底有一定要求。
- SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
2、4MyBatis的应用场景
MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。适用于性能要求高,且需求变化较多的项目,如互联网项目、大数据项目、物联网项目等。
三、MyBatis运行原理
3、1MyBatis核心配置
要在程序中使用MyBatis框架,需要了解MyBatis核心配置,配置好,才能使我们的程序使用起来更准确,更方便
MyBatis核心配置使用xml格式的配置文件进行配置,核心配置文件内容包括:
<?xml version="1.0" encoding="UTF-8" ?><!--配置文件头,标识本文档为xml文件,编码格式为UTF-8-->
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><!--引入MyBatis支持-->
<configuration><!--MyBatis根标签,所有配置内容都需要写在configuration中--><properties><!--引入配置文件--></properties><settings><!--设置MyBatis--><setting name="" value=""/></settings><typeAliases><!--设置类映射别名--></typeAliases><typeHandlers><!--设置字段拦截--></typeHandlers><objectFactory type=""><!--设置对象工厂--></objectFactory><plugins><!--设置MyBatis插件【pagenelper分页插件就在这里配置】--><plugin interceptor=""></plugin></plugins><environments default=""><!--设置MyBatis数据源,可以设置多个数据源--><environment id=""><transactionManager type=""></transactionManager><dataSource type=""></dataSource></environment></environments><databaseIdProvider type=""><!--设置MyBatis数据库厂商标识,可以设置不同厂商的不同语句--></databaseIdProvider><mappers><!--设置MyBatis映射器【配置操作接口的mapper.xml】--></mappers>
</configuration>
注意:MyBatis核心配置文件中的内容大部分可以不写,但是一旦写入,核心配置文件中的标签顺序不能随意编写,必须按顺序编写。【顺序为:properties、settings、typeAliases、typeHandlers、objectFactory、plugins、environments、databaseIdProvider、mappers】
3、2MyBatis核心对象
MyBatis有三大核心对象,分别是SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession
- SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 会生成 SqlSessionFactory,它提供的 build() 方法可以通过配置信息或代码生成SqlSessionFactory。它的最大特点就是用过即丢。创建 SqlSessionFactory 对象之后,这个类就不存在了,因此 SqlSessionFactoryBuilder 的最佳范围就是存在于方法体内,也就是局部变量。
- SqlSessionFactory:SqlSessionFactory 是工厂接口而不是现实类,他的任务就是创建 SqlSession。SqlSessionFactory 对象一旦创建,就会在整个应用程序过程中始终存在。没有理由去销毁或再创建它,在应用程序运行中也不建议多次创建 SqlSessionFactory。SqlSessionFactory 的作用域是 整个应用程序,即随着应用程序的生命周期一直存在。这种“存在于整个应用运行期间,并且只存在一个对象实例”的模式就是所谓的单例模式。
- SqlSession:SqlSession 是用于执行持久化操作的对象,类似于 JDBC 中的 Connection。它提供了面向数据库执行 SQL 命令所需的所有方法,可以通过 SqlSession 实例直接运行已映射的 SQL 语句。SqlSession获取映射器。让映射器通过命名空间和方法名称找到对应的 SQL,并发送给数据库,执行后返回结果。SqlSession 对应一次数据库会话。由于数据库会话不是永久的,因此 SqlSession 的生命周期也不是永久的,每次访问数据库时都需要创建 SqlSession 对象。