java中mybatis原理,mybatis的工作原理

20200620112110133007.png

由以上图可以看出,mybatis框架在操作数据库时大致经过了8个步骤。对这8个步骤分析如下:

1)读取mybatis配置文件mybatis-config.xml。mybatis-config.xml配置文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息,其中主要内容是获取数据库连接。

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

3)构建会话工厂。通过mybatis的环境等配置信息构建会话工厂SqlSessionFactory。

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

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

6)在Executor接口的方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等。Mapper.xml文件中的一个SQL对应一个MappedStatement对象,SQL的id即是MappedStatement的id。

7)输入映射参数。在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义(可以定义为Map、List类型、基本类型和POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的java对象映射到SQL语句中。这里对输入参数的映射过程就类似于JDBC编程中对preparedStatement对象设置参数的过程。

8)输出结果映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义(可以定义为Map、List类型、基本类型、POJO类型),Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射到java对象中。这种将输出结果映射到java对象的过程就类似于JDBC编程中对结果的解析处理过程。

以上就是mybatis工作的基本原理。

ORM映射框架常见的有两种,即hibernate和mybatis,他们的区别如下:

hibernate:它是一个全表映射的框架。通常开发者只需要定义好持久化对象到数据库表的映射关系就可以通过hibernate提供的方法完成持久层的操作了,开发者并不需要熟练的掌握sql语句的编写,hibernate会根据指定的存储逻辑,自动的生成对应的sql并调用JDBC接口来执行,所以hibernate的开发效率比mybatis稍高些。

但hibernate也有缺点,例如:它在多表关联时对SQL查询的支持较差、更新数据时要发送所有的字段、不支持存储过程、不能通过优化SQL来优化性能等等。

这些问题导致hibernate只适合在场景不太复杂且对性能要求不高的项目中使用。

mybatis:它是一个半自动映射的框架。这里的所谓半自动是相对于hibernate的全表映射而言的,mybatis需要手动匹配提供POJO、SQL和映射关系,而hibernate只需提供POJO和映射关系即可。与hibernate相比,虽然使用mybatis需要手动编写SQL,但是mybatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等优点。

因此mybatis常用于比较复杂和需要优化性能的项目,互联网项目中通常都使用mybatis。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值