什么是Mybatis?

MyBatis是一个半自动化ORM框架,用于数据库的持久层操作,提供灵活的SQL映射和POJO对象的映射功能。其工作流程包括配置文件读取、映射文件加载、会话工厂构建、会话对象创建等步骤。MyBatis的缓存分为一级缓存和二级缓存,提高查询效率。Mapper接口通过动态代理实现,使SQL操作变得简单透明。
摘要由CSDN通过智能技术生成

1、mybatis是什么?

mybatis是一款用于持久层的半自动化ORM框架

持久层是什么意思呢,可以把层字去掉,持久,也就是”保持长久“的意思,他针对的是系统中数据存在的时限。有一个基本问题大家应该知道,在内存中的数据是不持久的,如果计算机崩溃或者其他原因导致关机,数据就会丢失,但是磁盘上的数据是持久的,因此,用在持久层也就是这个框架是用来将内存中的数据写入到磁盘中的,再具体一点,就是写到数据库中。所以,框架用于持久层,就是说这个框架是和数据库进行交互的,用于数据库中数据操作的框架。
ORM,Object Relational Mapping,就是对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换

为什么说mybatis是半自动化orm框架

MyBatis被称为半ORM(Object-Relational Mapping)是因为它并不完全按照传统的ORM框架的方式来处理对象和关系数据库之间的映射关系。

传统的ORM框架会自动地将对象和数据库表进行映射,通过在对象和数据库之间建立映射关系,实现数据的持久化和操作。这种方式在某些情况下可能会带来性能问题,特别是当需要处理复杂的SQL语句或者对性能要求较高时。

相比之下,MyBatis更加灵活。它允许开发人员直接编写SQL语句,并且提供了强大的SQL映射功能,可以将SQL语句和Java对象进行映射。开发人员可以根据具体需求自由地编写和优化SQL语句,从而更好地控制数据库操作的性能和效率。

虽然MyBatis不像传统的ORM框架那样自动处理对象和数据库之间的映射关系,但它提供了方便的映射配置和查询方法,使得开发人员可以更加便捷地进行数据操作。因此,MyBatis被称为半ORM框架。

特性:

  • 支持定制化 SQL、存储过程以及高级映射
  • 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的操作
  • 可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(实体类)映射成数据库中的记录

优点:

  • 轻量级,性能出色
  • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据

2.MyBatis的工作原理

(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。

(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。

(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。

(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。

3.什么是缓存?

    缓存即为存在内存中的临时数据.将用户经常查询的数据存放在缓存(内存)中,用户去查询数据就不用去每次去数据库中查询,而是去缓存中查询,从而提高了查询的效率,解决了高并发系统的性能问题.

mybatis中,一级缓存的作用域在一个sqlsession中,在同一个sqlsession中执行两个相同的sql语句,第一次执行的sql语句后的结果数据将会写入到缓存中,第二次执行时就不会再去数据库中查询,直接会去缓存中获取,从而提高查询效率。当一个sqlsession结束后该sqlsession中的一级缓存就不存在了。mybatis默认开启一级缓存。
mybatis的二级缓存是多个sqlsession共享的,它的作用于是mapper的同一个namespace,不同的sqlsession执行相同namespace下的sql语句且向sql语句中传递的参数也相同。即最终执行相同的sql语句,第一次会将执行的结果写入二级缓存中,第二次执行相同的sql时不会再去数据库查询,直接从缓存中取数据,从而提升了查询效率。mybatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存。

4.Mapper动态代理

动态代理是一种在程序运行时生成代理类的技术,代理类实现了目标接口,并在实现中委托给实际的实现类来完成具体的方法调用。

在 MyBatis 中,Mapper 接口对应于一个具体的 SQL 映射文件,Mapper 接口中的方法对应于 SQL 映射文件中的 SQL 语句。

当 MyBatis 加载一个 Mapper 接口时,它会使用 JDK 的动态代理技术创建一个代理类,代理类实现了 Mapper 接口中的方法,并在实现中委托给 SqlSession 对象来完成具体的 SQL 操作。

在实际的调用过程中,当调用 Mapper 接口的方法时,实际上是调用了代理类的方法,代理类的方法中会通过 SqlSession 执行对应的 SQL 语句,最终将结果返回给调用方。

通过动态代理,MyBatis 实现了对 Mapper 接口的透明化封装,使得使用者可以像调用普通的 Java 接口一样使用 Mapper 接口,而无需关注具体的 SQL 语句和数据库操作细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值