Spring Boot 3:Mybatis

ORM 框架是什么

ORM(Object-Relation Mapping),是一种编程技术,能够实现面向对象编程语言与关系型数据库之间的数据转换(映射),解决了面向对象与关系数据库存在的互不匹配的现象。

ORM 是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM 框架的本质是简化编程中操作数据库的编码。

MyBatis 介绍

MyBatis 就是一款标准的 ORM 框架,被广泛的应用于各企业开发中。

MyBatis 支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。

MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。

MaBatis 可以使用简单的 XML 或注解用于配置和原始映射。将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

优点:

  • SQL 被统一提取出来,便于统一管理和优化
  • SQL 和代码解耦,将业务逻辑和数据访问逻辑分离
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射
  • 提供对象关系映射标签,支持对象关系组件维护
  • 支持动态 SQL

缺点:

  • 编写 SQL 语句时工作量可能会大
  • SQL 语句依赖于数据库,导致数据库移植性差

MyBatis 的概念

Mapper 配置: Mapper 配置可以使用基于 XML 的 Mapper 配置文件来实现,也可以使用基于 Java 注解的 MyBatis 注解来实现,甚至可以直接使用 MyBatis 提供的 API 来实现。【推荐使用XML方式,业务逻辑与数据访问逻辑相分离】

Mapper 接口: Mapper 接口是指自定义的一个数据操作接口。Mapper 接口的方法通常与 Mapper 配置文件中的 select、insert、update、delete 等 XML 结点一一对应。【可以理解为Dao,解析的时候使用了动态代理】

扫描二维码关注公众号,回复: 3625083 查看本文章

Executor: MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 进行的,Executor 是 MyBatis 的一个核心接口。

SqlSession: SqlSession 是 MyBatis 的关键对象,是执行持久化操作的独享。SqlSession 底层封装了 JDBC 连接,可以用 SqlSession 实例来直接执行被映射的 SQL 语句。

SqlSessionFactory: SqlSessionFactory 是 MyBatis 的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory 对象的实例可以通过 SqlSessionFactoryBuilder 对象类获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出。

MyBatis 的工作流程如下:

工作流程
工作流程
  • 首先加载 Mapper 配置的 SQL 映射文件,或者是注解的相关 SQL 内容。
  • 创建会话工厂,MyBatis 通过读取配置文件的信息来构造出会话工厂【SqlSessionFactory】。
  • 创建会话。通过会话工厂,MyBatis 就可以创建会话对象【SqlSession】。会话对象是一个接口,该接口中包含了对数据库操作的增删改查方法。
  • 创建执行器。因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器(Executor)的接口来帮它执行操作。
  • 封装 SQL 对象。执行器会将待处理的 SQL 信息封装到一个对象中【MappedStatement】,该对象包括 SQL 语句、输入参数映射信息和输出结果映射信息。
  • 操作数据库。拥有了执行器和 SQL 信息封装对象就可以访问数据库,最后再返回操作结果,结束流程。

在具体的使用过程中,按照上述的流程来执行。

使用

pom.xml

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${springboot-mybatis.version}</version>
        </dependency>
        
         <!--mysql连接-->
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <scope>runtime</scope>
         </dependency>

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>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer"/>
        <typeAlias alias="Long" type="java.lang.Long"/>
        <typeAlias alias="Map" type="java.util.Map"/>
        <typeAlias alias="HashMap" type="java.util.HashMap"/>
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/>
        <typeAlias alias="ArrayList" type="java.util.ArrayList"/>
        <typeAlias alias="LinkedList" type="java.util.LinkedList"/>
    </typeAliases>
</configuration>
mybatis:
    config-location: classpath:mybatis/mybatis-config.xml
    mapper-locations: classpath:mybatis/mapper/*.xml
    type-aliases-package: love.ning.yangxuyue.domain

猜你喜欢

转载自www.cnblogs.com/yang21/p/9815278.html