mybatis框架、相关的插件

Mybatis框架、及其相关的框架和插件


Mybatis

介绍:ORM框架,使用的话需要在pom文件中引用该依赖

1. 什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

MyBatis 本是Apache的一个开源项目 iBatis ,2010年这个项目由 Apache Software Foundation 迁移到了Google Code,并且改名为 MyBatis 。
三年之后,MyBatis 于 2013年11月迁移到 Github,最终一直扎根于 Github,并开枝散叶,发展壮大。

mybatis

1.1、什么是持久化?

持久化,可以理解成数据保存在数据库或者硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了。

1.2、什么是持久层?

持久层,就是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域,是把数据保存到数据库等存储设备中。在Java领域,最常见的持久层框架有两个:Hibernate 和 MyBatis。

1.3、什么是ORM?

ORM,即Object-Relationl Mapping,它的作用是在关系型数据库对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

1.4、为什么要做持久化和ORM设计?

在目前的企业应用系统设计中,一般采用MVC的分层开发模式,即 Model(模型)- View(视图)- Control(控制)为主要的系统架构模式。

MVC 中的 Model 包含了复杂的业务逻辑和数据逻辑,以及数据存取机制,例如 JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等等。将这些复杂的业务逻辑和数据逻辑分离,可以使系统的紧耦合关系转化为松耦合关系,从而降低系统耦合度,这是持久化要做的工作。

MVC 模式实现了表现层(即View)和数据处理层(即Model)的分离和解耦,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。

而ORM 作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。

简单来说,按通常的系统设计,使用 JDBC 操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。一般基本都是如下几个步骤:

  • 1、建立数据库连接,获得 Connection 对象。
  • 2、根据用户的输入组装查询 SQL 语句。
  • 3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。
  • 4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。
  • 5、然后一条一条读取结果集 ResultSet 对象中的数据。
  • 6、根据读取到的数据,按特定的业务逻辑进行计算。
  • 7、根据计算得到的结果再组装更新 SQL 语句。
  • 8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。
  • 7、最后依次关闭各个 Statement 对象和 Connection 对象。

由上可看出,代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。
其中的业务处理逻辑数据存取逻辑完全混杂在一块。
而一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。

另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。
而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。

所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,
另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,
而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。
所以为解决 这一困难,就出现 ORM 这一个对象和数据之间映射技术。

2、Hibernate和MyBatis的区别

2.1、Hibernate 介绍

Hibernate 是一个开放源代码的对象关系映射框架,
它对JDBC进行了非常轻量级的对象封装,
使得Java程序员可以随心所欲的使用对象编程思维操纵数据库

2.2、MyBatis 与 Hibernate 的区别

  • Hibernate 会自动生成SQL 语句,而MyBatis则要求开发者编写具体的SQL 语句。
  • 相对Hibernate等全自动ORM机制而言,MyBatis 以SQL开发的工作量数据库移植性上的让步,为系统设计提供了更大的自由空间。

(可以理解为 MyBatis 在sql语句的编写上有了更大的自由度,想怎么写怎么写。)
但现在也催生了针对mybaits框架的很多插件,可以自动生成一些简单的单表操作的sql,甚至是基本的逻辑层(业务)代码。

  • 作为全自动ORM 实现的一种有益补充,MyBatis 的出现显得别具意义。

3、MyBatis的工作原理

3.1、传统的JDBC编程

JAVA程序通过JDBC链接数据库,这样我们就可以通过SQL对数据库进行编程。
JAVA链接数据库大致分为五步,如下所示:

  • 1、使用JDBC编程需要链接数据库,注册驱动和数据库信息。
  • 2、操作Connection,打开Statement对象。
  • 3、通过Statement执行SQL语句,返回结果放到ResultSet对象。
  • 4、使用ResultSet读取数据。
  • 5、关闭数据库相关的资源。

JDBC 代码示例:

public class JdbcDemo{
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String username = "root";
        String password = "root";
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
        Connection conn = DriverManager.getConnection(url,username,password);
        String sql = "insert into t_person values('Tom', 25, '138xxxxxxxx', '北京');";
        PreparedStatement pstm = conn.prepareStatement(sql);
        int update = pstm.executeUpdate();
        System.out.println(update);
        pstm.close();
        conn.close();
    }
}

传统的JDBC方式存在一些弊端:
(1)工作量比较大。
我们需要先建立链接,然后处理JDBC底层业务,处理数据类型。
我们还需要处理Connection对象,Statement对象和Result对象去拿数据,并关闭它们。
(2)我们对JDBC编程处理的异常进行捕获处理并正确的关闭资源。

3.2、MyBatis工作原理:对JDBC进行了封装

首先我们先了解一下 MyBatis四大核心组件

  • 1、SQLSessionFactoryBuilder(构造器):它会根据配置信息 或者 代码 去生成SqlSessionFactory。
  • 2、SqlSessionFactory(工厂接口):依靠工厂生成SqlSession。
  • 3、SqlSession(会话):是一个既可以发送SQL去执行并且返回结果,也可以获取Mapper接口。
  • 4、SQL Mapper:是由一个JAVA接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。SQL是由Mapper发送出去,并且返回结果。

MyBatis工作原理示意图:
在这里插入图片描述
从上面的流程图可以看出 MyBatis 和 JDBC 的执行时相似的。
MyBatis的底层操作封装了JDBC的API,MyBatis的工作原理以及核心流程与JDBC的使用步骤一脉相承,MyBatis的核心对象(SqlSession,Executor)与JDBC的核心对象(Connection,Statement)相互对应。

4、MyBatis的优点

MyBatis 避免了几乎所有的 JDBC 代码手动设置参数以及获取结果集
MyBatis 可以使用简单的 XML注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis是对JDBC的封装。

相对于JDBC,MyBatis有以下优点:

  • (1)SQL统一管理,对数据库进行存取操作。
    我们使用JDBC对数据库进行操作时,SQL查询语句分布在各个Java类中,这样可读性差不利于维护,当我们修改Java类中的SQL语句时重新进行编译
    Mybatis 可以 把SQL语句放在 配置文件统一进行管理,以后修改配置文件,也不需要重新就行编译部署。
  • (2)生成动态SQL语句
    我们在查询中可能需要根据一些属性进行组合查询,比如我们进行商品查询,我们可以根据商品名称进行查询,也可以根据发货地进行查询,或者两者组合查询。
    如果使用JDBC进行查询,这样就需要写多条SQL语句。

Mybatis 可以在配置文件中通过使用标签进行SQL语句的拼接,生成动态SQL语句。

可以简单的理解为:
Mybatis可以通过框架提供的标签来实现编写带不同条件的sql语句。而JDBC不太行。

  • (3)能够对结果集进行映射。
    我们在使用JDBC进行查询时,返回一个结果集ResultSet,我们要从结果集中取出结果再封装为需要的类型。
    在Mybatis中,我们可以设置将结果直接映射为自己需要的类型,比如:JavaBean对象、一个Map、一个List等等。
    省了一步操作,通过映射关系直接将结果集转成想要的对象类型。

Mybatis Plus 框架

  1. Java持久层框架。
  2. MyBatis基础上进行了扩展(可以当mybatis直接使用),目的在于简化数据库操作和提高开发效率。
  3. 丰富的功能和工具,更轻松地进行数据库操作,如增删改查等常见操作。
  4. 提供一套方便的 API 和注解,可减少编写重复性代码的工作。

官网https://www.baomidou.com

# 和Mybatis 框架的区别

  1. 功能增强:在 MyBatis 框架的基础上提供了更多的功能,如通用的 CRUD操作、分页查询、条件构造器等。这些功能减少了开发人员的工作量,提高了开发效率。
  2. 注解支持:MyBatis Plus引入了一系列注解,如@TableName、@TableId、@TableField等,使得实体类的映射更加灵活和方便,不再需要 XML映射文件。
  3. 更强大的条件构造器:MyBatis Plus 的条件构造器可以更直观和链式的方式构建 SQL 查询条件,而不必担心拼接 SQL 字符串。
  4. 自动代码生成:MyBatis Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类和 Mapper 接口,极大地简化了开发过程。

MyBatis Plus 框架的使用

  1. MyBatis Plus 提供了 Spring Boot 的自动装配功能starter,并且同时实现了 MyBatis 的相关功能
    在spring boot的pom.xml文件中引入 MyBatis Plus 依赖引入了 MyBatis Plus 的依赖,可以不用引入 MyBatis 的依赖了
    至于能不能同时引入这两个依赖,或者同时引入后会不会有什么影响,可以试一试
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>
  1. MyBatis Plus 提供了一个基础的 BaseMapper 接口,其中包含了对单表的增删改查操作的接口。
    我们也可以定义一个Mapper层的接口继承 BaseMapper,就可以通过我们自己定义的 dao 层的mapper对象来调用 BaseMapper 里面的基础接口。
    在这里插入图片描述
    我们自己定义的Mapper只需要继承这个接口,就能够使用这些方法。也可以改造原来的 UserMapper ,自己在 UserMapper 类里写需要的方法,然后在xml文件中生成对应的sql来使用。
    在这里插入图片描述

Mybatis Plus的常用注解

引入了 MyBatis Plus 的依赖后,然后通过新建的 Mapper 接口中继承了 BaseMapper,就可以实现对单表的增删改查操作。
通过观察我们自己写的的 UserMapper 可以发现,它继承的 BaseMapper 是一个泛型接口,我们指定了 user 表对应的 PO 类 User:

public interface UserMapper extends BaseMapper<User> {
    // 这类里是空的是因为初始只继承,还没有自己编写自定义需要的方法,可以调用BaseMapper里的单表操作的方法
}

提一个问题:MyBatis Plus 是如何知道对哪张表进行操作的呢?

泛型中的 User就是与数据库对应的 PO类。Mybatis Plus 就是根据 PO 实体 的信息来推断出表的信息,从而生成具体的 SQL语句。在默认情况下,MyBatis Plus 会根据 PO 实体 进行以下操作:

  • Mybatis Plus 会把 PO 实体的类名按照 驼峰转下划线 的规则将其作为数据库表名;
  • Mybatis Plus 会把 PO 实体的所有变量名按照 驼峰转下划线的规则作为表的字段名,并根据变量类型推断字段类型;
  • Mybatis Plus 会把名为 id 的字段作为该表的主键。

但在很多的实际情况下,实际开发情况会与上面默认的情况不符。
比如,数据库表以tb_开头、主键名不是id、字段是一些特殊的关键字等等。
这些情况在MyBatis中,可以在Mapper.xml文件中进行解决,
但是在 Mybatis Plus中就可以使用下面的注解进行解决了。

  • 具体有哪些常用注解,可以自行百度搜索

MyBatis Plus 常见配置

MyBatis Plus 同样支持使用 yaml 格式的配置,关于 MyBatis Plus 的配置可以从起官网中进行了解:使用配置

下面是关于 MyBatis Plus 的常用配置(模板,具体内容根据项目文件修改):

mybatis-plus:
  type-aliases-package: com.demo.mp.domain.po # 别名扫描包
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
  global-config:
    db-config:
      id-type: auto # 指定 id 的生成方式
  configuration:
    map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
    cache-enabled: false # 是否开启二级缓存

mybatis X 插件

MybatisX 是一款基于 IDEA 的快速开发插件,方便在使用mybatis以及mybatis-plus开始时简化繁琐的重复操作,提高开发速率。
(是针对mybatis plus框架的使用开发出来的插件,可以搭配mybatis plus 依赖使用。)
在这里插入图片描述

使用 Mybatis X 插件的好处

  • 节省大量持久层代码开发时间
  • 强大的功能为业务编写提供各类支持
  • 配置简单,告别各类复杂的配置文件

使用教程,可参考其他优秀的文章:
Mybatis X 插件使用教程 1
Mybatis X 插件使用教程 2
Mybatis X 插件使用教程 3


IDEA中还有一款插件也叫 MyBatis Plus,后事如何,日后再查

在这里插入图片描述

free mybatis plugin 插件

免费的的idea上的mybatis插件,现在闭源了,作者不维护了
版本更新截止到2019.12.18

idea的mybatis插件冲突之 Free Mybatis Plugin插件 和Mybatis X 插件
Free Mybatis Plugin:一款免费的的idea上的mybatis 框架的插件
Mybatis X :是针对使用mybatis plus 框架的插件

总结

  1. mybatisX 是对mybatis plus的拓展插件,也有Free Mybatis Plugin的功能。
  2. 如果项目不用mybatis plus可以只安装Free Mybatis Plugin。
  3. 只用 mybatis 框架,也可用 Mybatis X 插件。

Free MyBatis Tool 插件

(Free MyBatis Tool is a plugin that enhances idea support for mybatis)
是一款增强idea对mybatis支持的插件,主要功能如下:
主要功能如下:

  • 生成mapper xml文件
    逆向生成mapper、类功能:
    通过这个插件不用使用官方的mybatis逆向生成包,写配置文件等等,
    仅需连接对应数据库就可以实现逆向生成对应的类、mapper文件等。
    好用的不得了…唯一的缺陷可能就是重新生成的会覆盖之前的代码(不过这个也是可以原谅的毕竟有git版本管理可以进行手动控制)。
  • 跳转功能:快速从代码跳转到mapper及从mapper返回代码
  • mybatis自动补全及语法错误提示
  • 集成mybatis generator gui界面
  • 根据数据库注解,生成swagger model注解

总结:

  1. 如果不需要使用自动生成代码功能,Free MyBatis Tool 都可以用在mybaits、mybatis plus框架搭配。
  2. 如果使用mybatis plus 框架,推荐搭配 Mybatis X 插件。
  3. 如果使用 mybatis 框架,推荐搭配 Free MyBatis Tool 插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值