java之路—— 带你初步了解mybatis框架

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: java之路—— 带你初步了解mybatis框架

一、什么是mybatis


MyBatis是一种优秀的基于Java的持久层框架,它利用了面向对象的编程思想来操作数据库。 MyBatis 工作原理 主要是通过 XML 文件或注解配置 SQL 语句,然后运用“对象关系映射(ORM)”技术将数据库中的数据转换为Java对象,方便Java程序的使用。 MyBatis 并不会对Java对象进行过多的侵入性操作,仅仅提供了一种便捷的方式来操作数据库,这带来了极为优秀的“扩展性”和“可插拔性”。


MyBatis 最初是一个由 Apache 软件基金会支持的开源项目 iBATIS,在2009年正式更名为 MyBatis。与其他 ORM 框架相比,MyBatis 的优势在于它具有极高的灵活性和可配置性,可以轻松地满足各种复杂的数据库操作需求。同时 MyBatis 还提供了Caching,Batching和Deferred loading 等高级特性,这些特性使得它可以方便地处理高并发和大数据量的场景,从而获得更好的性能。


除了官方提供的基于 XML 配置的 SQL 映射文件之外,MyBatis 还提供了注解和 API 的方式来进行配置。 这使得开发者可以根据具体需求来选择最适合的方式进行工作,极大地提高了开发效率和代码的可读性。


总的来说,MyBatis 是一个具有高度灵活性和可配置性的 ORM 框架,具有成熟的性能优化机制和易于使用的 API,可以轻松地集成到各种 Java 项目中,使得 Java 数据库访问更加高效、灵活和易于维护。


二、 mybatis的核心是什么


MyBatis 核心主要包括以下三个方面:


1. 映射器 Mapper: MyBatis 的核心组件即 Mapper,其主要作用是定义各种操作数据库的 SQL 语句和方法。映射器中的 SQL 语句可以通过 XML 或注解来定义,其中 XML 风格的映射器比较流行,因为其更加易于管理和维护。Mapper 接口中的方法必须与 SQL 语句中的参数和返回值类型一致,以便 MyBatis 可以正确执行 SQL 语句,同时将结果封装成对象返回给 Java 代码。


2. 配置 Configuration: MyBatis 的配置文件主要用于配置数据源、插件、类型转换器、别名等信息,以及指定映射器的位置和加载方式。Configuration 中的所有信息都可以通过 Java API 或 XML 文件来配置,使得 MyBatis 的配置变得非常灵活和可扩展。


3. 执行器 Executor: Executor 是 MyBatis 执行 SQL 语句的核心组件,它的工作原理主要是将 SQL 语句交给 StatementHandler 来处理,然后由 ParameterHandler 来设置 SQL 参数,最后由 ResultSetHandler 来处理查询结果。MyBatis 有三种 Executor 实现类型,分别是 SimpleExecutor、ReuseExecutor 和 BatchExecutor,每种实现方式都有各自的优点和适用场景,具体根据实际业务情况来选择最合适的 Executor 类型。


总之,MyBatis 的核心是 Mapper、Configuration 和 Executor,它们共同协作来实现对数据库的操作。这种基于 XML 或注解配置的方式,使得 MyBatis 具有高度的灵活性和可扩展性,可以方便地集成到各种 Java 项目中,同时也让 MyBatis 成为了一个备受欢迎的 ORM 框架。


mybatis的核心框架图:

7fc9cd0b3ddd4c128b5b6f4a675b81c1.png


三、mybatis的优缺点


** 优点:**


1、简单易学

mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

2、灵活

mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

3、解除sql与程序代码的耦合

通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

4、提供映射标签,支持对象与数据库的orm字段关系映射

5、提供对象关系映射标签,支持对象关系组建维护

6、提供xml标签,支持编写动态sql。

缺点:


1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。


2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。


3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。


四、mybatis的基本配置


MyBatis 的基本配置主要包括配置数据源信息、映射器信息、类型别名等,一般通过 XML 文件进行配置或者java进行配置。


下面是一个示例 MyBatis 配置文件(mybatis-config.xml)的代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置数据源 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&amp;serverTimezone=UTC" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!-- 配置映射器 -->
    <mappers>
        <mapper resource="com/mybatis/demo/mapper/UserMapper.xml" />
        <mapper class="com.mybatis.demo.mapper.OrderMapper" />
    </mappers>
    <!-- 配置类型别名 -->
    <typeAliases>
        <typeAlias alias="User" type="com.mybatis.demo.entity.User" />
        <typeAlias alias="Order" type="com.mybatis.demo.entity.Order" />
    </typeAliases>
</configuration>

上述代码中,配置文件以元素为根节点,包括三个部分:数据源配置、映射器配置和类型别名配置。其中 元素指定了 MyBatis 的环境配置,包括数据源和事务管理器等信息。 元素用于配置映射器信息,可以通过 元素指定映射器文件路径或映射器接口类。 元素用于配置类型别名,可以通过其alias属性为类型起一个名称,以便在其他地方使用。


此外,还可以通过 Java 代码直接配置 MyBatis,例如:

public class MyBatisConfig {
  // 通过 Java 代码配置数据源
  @Bean
  public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&amp;serverTimezone=UTC");
    dataSource.setUsername("root");
    dataSource.setPassword("123456");
    return dataSource;
  }
  // 通过 Java 代码配置 SqlSessionFactory
  @Bean
  public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource());
    Resource[] mapperLocations = new PathMatchingResourcePatternResolver().getResources("classpath*:com/mybatis/demo/mapper/*.xml");
    sessionFactory.setMapperLocations(mapperLocations);
    return sessionFactory.getObject();
  }
  // 通过 Java 代码配置 MapperScannerConfigurer
  @Bean
  public MapperScannerConfigurer mapperScannerConfigurer() {
    MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
    scannerConfigurer.setBasePackage("com.mybatis.demo.mapper");
    scannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
    return scannerConfigurer;
  }
}

上述代码中,通过创建 Java 配置类来配置数据源信息、SqlSessionFactory 和映射器信息,最后使用MapperScannerConfigurer扫描 Mapper 接口,并自动将这些接口的代理对象注入到 Spring 容器中,以便在业务中使用。


五. mybatis基本流程


MyBatis 的基本流程包括以下四个步骤:


1. 加载配置文件: MyBatis 首先会读取配置文件(XML 或 Java)信息,并解析出对数据库的配置和映射器信息。


2. 创建 SqlSessionFactory:基于配置文件信息,MyBatis 会创建一个 SqlSessionFactory 对象,该对象是数据库访问的入口,它能够根据配置信息创建 SqlSession 对象。


3. 创建 SqlSession: SqlSession 是 MyBatis 操作数据库的核心,该对象提供了丰富的方法,包括插入、更新、删除、查询等操作。创建 SqlSession 对象时,需要指定执行 SQL 语句的参数,以及事务的隔离级别等信息。SqlSession 对象可以通过 SqlSessionFactory 的 openSession() 方法来创建。


4. 执行 SQL 语句: SqlSession 对象提供了多种方式执行 SQL 语句,包括直接执行 SQL 语句、调用映射器接口和调用 annocation 注解等方式。其中调用映射器接口是最为常用的方式,MyBatis 会根据接口、方法名和入参类型查找对应的 SQL 语句,并执行该语句。执行结果会自动封装成 Java 对象返回。

98d889ab78294cb7957d4736ca33578f.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
16 5
|
1天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
7天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
19天前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
34 1
|
21天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
22天前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
|
20天前
|
存储 算法 Java
Java中的集合框架深度解析与实践
【8月更文挑战第31天】在Java编程的海洋中,集合框架扮演着不可或缺的角色。本文将带你领略Java集合框架的魅力,从理论到实践,深入浅出地探索List、Set和Map等核心接口的使用技巧。我们将通过具体代码示例,展示如何在日常开发中高效运用这些工具,让你的代码更加优雅和高效。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往Java集合世界的大门。
|
28天前
|
并行计算 算法 Java
Java 中的 fork-join 框架详解
【8月更文挑战第23天】
44 0
|
1月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
13 0