zoukankan      html  css  js  c++  java
  • MyBatis(一)、理论部分

    快速上手

    https://blog.csdn.net/hellozpc/article/details/80878563#6CRUD_418

    官方文档

    https://mybatis.org/mybatis-3/zh/index.html

    w3Cschool

    https://www.w3cschool.cn/mybatis/7zy61ilv.html

    全面总结(荐)

    https://www.cnblogs.com/erbing/p/9547071.html

    什么是 MyBatis ?

    orm框架

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    MyBatis如何安装?

    要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

    如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

    <dependency>  
        <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  
        <version>x.x.x</version>
    </dependency>
    

    MyBatis的功能架构:

    我们把Mybatis的功能架构分为三层:

    API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
    数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
    基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。 
    

    MyBatis的优缺点

    优点:

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
    • 解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql。

    缺点:

    • 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
    • SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
    • 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
    • 二级缓存机制不佳

    扩展

    • jpa是对象与对象之间的映射,而mybatis是对象和结果集的映射。
    • jpa移植性比较好,不用关心用什么数据库,因为mybatis自由写sql语句,所以当项目移植的时候还需要改sql。(及时判断数据库类型,不嫌累么)。
    • 当需要修改字段的时候mybatis改起来特别费事,而jpa就相对简单。
    • 如果用hibernate学习起来比较费时间,而mybatis相对来说比较简单,也可以用springdata,但个人觉得springdata只适合单表。 springdata底层用的还是hibernate

    MyBatis底层本质

    不管是注解开发还是xml配置开发

    • 关键是需要找到唯一标识、sql语句、返回类型封装为一个mapper [ 用于增强动态代理对象 ]
    • 唯一标识在namespace中+id 是接口名和方法
    • 至于返回的类型封装在哪
      • 注解开发在泛型信息中
      • xml开发在resultType标签中
  • 相关阅读:
    LeetCode | Remove Duplicates from Sorted List
    LeetCode | Remove Duplicates from Sorted Array
    LeetCode | Merge Sorted Array
    opencv的配置、使用
    LeetCode | Merge Two Sorted Lists
    LeetCode | Minimum Depth of Binary Tree
    LeetCode | Same Tree
    LeetCode | Maximum Depth of Binary Tree
    LeetCode | Insertion Sort List
    python运算符优先级
  • 原文地址:https://www.cnblogs.com/biturd/p/12623144.html
Copyright © 2011-2022 走看看