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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
1月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
118 8
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
72 7
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1369 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
SQL XML Java
84 0
|
2月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
189 12
|
3月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
3月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
250 23
|
3月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。