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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
32 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
19天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
110 29
|
30天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
62 1
|
30天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
99 6
|
30天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
32 1
|
30天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
56 2
|
1月前
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
59 20
|
1月前
|
并行计算 算法 Java
Java中的Fork/Join框架详解
Fork/Join框架是Java并行计算的强大工具,尤其适用于需要将任务分解为子任务的场景。通过正确使用Fork/Join框架,可以显著提升应用程序的性能和响应速度。在实际应用中,应结合具体需求选择合适的任务拆分策略,以最大化并行计算的效率。
51 23
|
1月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
53 3