第6章 初始MyBatis
6.1 MyBatis
MyBatis:是一个支持普通SQL查询,存储过程以及高级映射的持久层框架,使用简单的XML或注解进行匹配和原始映射,用以将接口和Java的POJO(普通Java对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想操作数据库
MyBatis框架:ORM(对象关系映射)框架
ORM(即对象关系映射)框架:是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中
ORM框架的工作原理图:
使用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象(Persisent Object,PO),而ORM框架则会通过映射关系将这些面向对象的操作转换成底层的SQL操作
当前的ORM框架产品有很多,常见的ORM框架有Hibernate和MyBatis。这两个框架主要区别如下:
1.Hibernate:是一个全表映射的框架。通常开发者只需要定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。开发者并不需要熟练地掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。然而Hibernate自身也存在着一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。这些问题导致其适用在场景不太复杂且对性能要求不高的项目中使用
2.MyBatis:是一个半自动映射的框架。这里所谓的“半自动”是相对Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO,SQL和映射关系,而Hibernate只需要提供POJO和映射关系即可。与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量要大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目使用MyBatis更加合适
6.2 MyBatis工作原理
对工作原理的每一步流程进行详细讲解,具体如下:
(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)定义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的操作数据库大致可分为以下几个步骤:
(1)读取配置文件
(2)根据配置文件构建SqlSessionFactory
(3)通过SqlSessionFactory创建SqlSession
(4)使用SqlSession对象操作数据库(包括查询,添加,修改,删除以及提交事务等)
(5)关闭SqlSession
6.3 MyBatis入门程序
MyBatis入门程序推荐文章:https://www.cnblogs.com/sh086/p/8351896.html