MyBatis基础

MyBatis

1.1 MyBatis概述

简单的说MyBatis就是JDBC的升级版,是应用程序和数据库交互的桥梁,通俗的说MyBatis就是跟数据库打交道的。

1.1.1 传统JDBC的劣势:

JDBC是Java程序实现数据访问的基础,它提供了一套操作数据库的API,一般通过加载驱动、获取连接、获取执行者对象、发送SQL语句等步骤实现数据库操作。但是,传统的JDBC编程存在一定的局限性,具体如下。
1)代码烦琐
使用JDBC编程时,代码量较大,尤其是当数据表字段较多时,代码显得烦琐、累赘并且使开发人员的工作量增加。
2)表关系维护复杂
数据表之间存在各种关系,包括一对一、一对多、多对多、级联等。如果采用JDBC编程的方式维护数据表之间的关系,过程较为复杂并且容易出错。
3)硬编码
当使用JDBC编程时,SQL语句都是硬编码到Java程序中,如果改变SQL语句,那么需要重新编译Java 代码,不利于系统后期的维护。
4)性能问题
在批量处理数据的时候,JDBC编程存在效率低下的问题,此时,程序将向数据库发送大批量的同类SQL语句请求,浪费数据库资源﹐影响运行效率。

由于JDBC存在的缺陷,企业中通常使用ORM框架来完成数据库的操作。

1.1.2 ORM简介

ORM的全称是Object Relational Mapping,即对象-关系映射。ORM是一种规范,它是将简单Java对象(POJO)和数据库表记录进行映射,使数据库表中的记录和POJO—一对应,如图1.1所示。
MyBatis基础
在当今企业级应用的开发环境中,对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系数据。当采用面向对象的方法开发程序时,一旦需要操作数据库,就必须回到关系数据库的访问方式,这给开发人员编程带来一系列的困扰。于是,ORM应运而生。ORM可以把关系数据库包装成为面向对象的模型,并成为应用程序和数据库交互的桥梁。
ORM框架是对象-关系映射的系统化解决方案,当ORM框架完成映射后,开发人员既可以利用面向对象程序设计语言的简单易用性,又可以充分发挥关系数据库的优势。目前,在Java应用领域流行的ORM框架有Hibernate, MyBatis 等,下面对这两种ORM框架做简要介绍。
1) Hibernate
Hibernate是较为优秀的ORM框架之一,已被选为JBoss服务器的持久层解决方案。Hibernate建立在POJO和数据库表记录的直接映射关系之上,它通过XML映射文件(或注解)提供的规则实现关系映射,提供一种全表映射的模型,程序可以通过POJO直接操作数据库中的数据。Hibernate封装性较高,开发人员通过XML映射文件(或注解)定义好映射规则后,Hibernate会根据映射规则自动生成SQL语句并调用JDBC 的API执行,这减少了开发人员编写SQL语句的烦琐,大大提升开发效率。但是,由于全表映射的特性,Hibernate也存在一些局限,例如,无法根据不同的条件组装不同的SQL,对多表关联和复杂SQL查询支持较差,不能有效支持存储过程和SQL语句优化等。随着互联网行业的发展, Hibernate的局限性逐渐显现并影响其市场份额,目前,MyBatis 已成为互联网企业的首选。
2)MyBatis
MyBatis是一种“半自动化”的ORM框架,和 Hibernate不同,MyBatis需要手动提供POJO.SQL语句并匹配映射关系,正因为此,它可以更加灵活地生成映射关系。MyBatis充分允许开发人员利用数据库的各项功能,例如存储过程、视图,复杂查询等,具有高度灵活、可优化、易维护等优点。与 Hibernate相比,使用MyBatis 的编码量较大,但这并不影响它在一些复杂的和需要优化性能的项目中使用。

1.1.3 MyBatis简介

MyBatis的前身是 Apache 组织的一个开源项目iBatis。2010 年,iBatis 由 ApacheSoftware Foundation迁移到了Google Code,并且改名为MyBatis。2013年11月迁移到Github,目前MyBatis 由 Github 维护。

MyBatis是一款优秀的ORM框架,它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,它使用XML文件或注解进行配置和映射,将接口和 Java 的 POJO映射成数据库中的记录。

MyBatis作为ORM框架,其核心思想是剥离出程序中的大量SQL语句并将这些SQL语句配置到映射文件中。因此,使用MyBatis可以根据开发需要灵活编写SQL语句并指定映射规则,同时,程序也和SQL语句分离,实现在不修改程序代码的情况下变更SQL语句的功能,提升了程序的扩展性。
此外,MyBatis支持动态列,动态表名、存储过程,同时提供了简易的日志、缓存和级联功能。

1.1.4 MyBatis的功能架构

MyBatis具有自身独特的功能架构,具体如图1.2所示。
MyBatis基础
从图1.2中可以看出,MyBatis 的功能架构由三层组成,包括API接口层数据处理层基础支撑层
API接口层:提供给外部使用的接口API,开发人员通过这些API来操纵数据库。API接口层接收到调用请求时,会调用数据处理层来完成具体的数据处理。

数据处理层:负责具体的参数映射、SQL解析、SQL执行和结果映射等。它主要的功能是根据调用的请求完成一次数据库操作。

基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载、缓存处理等,MyBatis将这些共用的功能抽取出来作为最基础的组件,为上层的数据处理层提供支持。

1.1.5 MyBatis的工作流程

MyBatis基础
图1.3展示了MyBatis的工作流程,具体来说,可分为以下步骤。

(1)MyBatis读取配置文件和映射文件。其中,配置文件设置了数据源、事务等信息;映射文件设置了SQL执行相关的信息。映射文件要引入到配置文件中才能被执行。

(2)MyBatis根据配置信息和映射信息生成SqlSessionFactory对象,SqlSessionFactory对象的重要功能是创建MyBatis 的核心类对象SqlSession。

(3)SqlSession中封装了操作数据库的所有方法,开发者一般通过调用SqISession完成数据库操作,但实际上,SqIlSession并没有直接操作数据库﹐它通过更底层的Executor执行器接口操作数据库。Executor接口有两个实现类,一个是普通执行器,另外一个是缓存执行器。

(4)Executor执行器将要处理的SQL信息封装到一个MappedStatement对象中。在执行SQL语句之前﹐Executor执行器通过MappedStatement对象将输入的Java数据映射到SQL语句,在执行SQL语句之后﹐Executor执行器通过MappedStatement对象将SQL语句的执行结果映射为Java数据,其中,作为输入参数和输出结果的映射类型可以为Java基本数据类型,也可为List类型、Map类型或POJO类型。

上一篇:.NET 多条件动态参数查询方法 - SqlSugar ORM


下一篇:supervisord + docker run = web页面管理运行的docker