zoukankan      html  css  js  c++  java
  • 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,解析的时候使用了动态代理】

    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

     application.properties

    mybatis.config-location=classpath:mybatis/mybatis-config.xml
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
    mybatis.type-aliases-package=love.ning.yangxuyue.domain
    spring.datasource.url=jdbc:mysql://localhost:3306/xxx?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true 
    spring.datasource.username=root 
    spring.datasource.password= 
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    

    Application.java

    可使用@MapperScan扫仓库包:
    @MapperScan("love.ning.yangxuyue.mapper")
    

      

  • 相关阅读:
    Flink 多流转换算子
    Flink 基本算子map、keyBy、sum、reduce
    Scala 调用方法时加不加小括号
    Hive rank函数开窗
    Hive 窗口函数
    Scala 集合Map的基本操作
    LOJ#2402. 「THUPC 2017」天天爱射击 / Shooting 整体二分+树状数组
    LOJ#106. 二逼平衡树 树套树
    LOJ#2340. 「WC2018」州区划分
    LOJ#2304. 「NOI2017」泳池(70pts) dp
  • 原文地址:https://www.cnblogs.com/yang21/p/9815278.html
Copyright © 2011-2022 走看看