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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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
目录
相关文章
|
14天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
19天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
33 1
持久层框架MyBatisPlus
|
23天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
23天前
|
消息中间件 Java 数据库连接
Java 反射最全详解 ,框架设计必掌握!
本文详细解析Java反射机制,包括反射的概念、用途、实现原理及应用场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 反射最全详解 ,框架设计必掌握!
|
1月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
50 1
Spring 框架:Java 开发者的春天
|
29天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
25天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
13 1
|
1月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
29天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
31 6
|
1月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
58 5
下一篇
无影云桌面