MyBatis和MyBatis Plus比较详解

1. 前言

本文旨在探讨在SpringBoot框架下,MyBatis与MyBatis Plus这两个持久层框架之间的差异、各自的优缺点以及适用场景。通过对比分析,帮助开发者更好地理解和选择适合自己项目的持久层解决方案。

2. MyBatis与MyBatis Plus的差异

MyBatis和MyBatis Plus都是优秀的持久层框架,用于简化数据库操作。然而,它们在特性、使用方式和效率上存在一些差异。

2.1 特性差异

MyBatis提供了定制化SQL、存储过程以及高级映射的支持,它要求开发者手动编写SQL语句,并使用注解或XML文件进行配置。相比之下,MyBatis Plus则提供了更为丰富的功能,如自动注入基本CRUD操作、强大的条件构造器、支持Lambda形式调用等,这些特性使得开发者能够更高效地进行数据库操作。

2.2 使用方式

MyBatis在使用时需要开发者手动解析实体关系映射并转换为MyBatis内部对象注入容器,而MyBatis Plus则能够自动解析实体关系映射,并提供了内置的Mapper和通用的Service,使得开发者能够通过少量配置实现单表的大部分CRUD操作。

2.3 效率

MyBatis需要开发者手动编写SQL语句,虽然灵活但可能会引入更多的错误和冗余代码。而MyBatis Plus通过自动化配置和条件构造器等功能,减少了开发者的手动操作,提高了开发效率。

3. MyBatis与MyBatis Plus的优缺点

3.1 MyBatis的优缺点

优点

  • 灵活性高:MyBatis允许开发者完全控制SQL语句的编写,可以根据具体需求定制SQL,实现高度灵活的数据库操作。
  • 与JDBC相比代码量减少:MyBatis减少了大量的JDBC冗余代码,使得开发者能够更专注于业务逻辑的实现。
  • 良好的兼容性:MyBatis支持各种数据库,只需JDBC支持的数据库,MyBatis都能与之兼容。

缺点

  • 手动编写SQL:虽然灵活,但也可能导致SQL语句的编写和维护变得复杂和繁琐。
  • 配置文件较多:MyBatis需要配置大量的XML文件或注解,增加了项目的复杂性和维护成本。

3.2 MyBatis Plus的优缺点

优点

  • 简化开发:MyBatis Plus通过自动化配置和内置功能,简化了数据库操作的开发过程,提高了开发效率。

    java 复制代码
    //少量使用,可以简化开发,不用手写sql语句了
    nodeMapper.selectOne(new QueryWrapper<Node>().eq("id",1).select("id"));
  • 强大的CRUD操作:MyBatis Plus提供了强大的条件构造器和通用的Mapper、Service,使得开发者能够轻松实现单表的大部分CRUD操作。

  • 预防SQL注入:MyBatis Plus内置了SQL注入剥离器,有效预防了SQL注入攻击。

缺点

  • 对MyBatis的改动:虽然MyBatis Plus是在MyBatis的基础上进行扩展的,但引入MyBatis Plus可能会对现有MyBatis架构产生一定影响。

  • 维护性差:以查询为例,默认提供的方法都是查询所有字段,我们都知道在编写Sql的时候第一条优化准则就是不要使用Select * 因为这种写法是很Low。

    java 复制代码
    //实际执行的sql为select * from tableName where id = 1
    nodeMapper.selectById(1);
    //当我们修改表结构后,没有了id字段,此时就要手动改代码了
    nodeMapper.selectOne(new QueryWrapper<Node>().eq("id",1).select("id"));
    //当然这个问题也可以通过下面的代码写法来避免
    Node node = nodeMapper.selectOne(new LambdaQueryWrapper<Node>().eq(Node::getId, 1).select(Node::getId));
  • 联表操作麻烦:当你的业务需要联合多个表进行查询时,Mybatis Plus需要写一堆代码来构建sql语句,简直不要太丑,还是老老实实在xml文件中手写sql吧。

4. 使用场景

4.1 MyBatis的使用场景

当项目需要高度定制化的SQL语句,或者需要对数据库操作进行精细控制时,MyBatis是一个很好的选择。它适合那些对数据库操作有较高要求,且愿意投入更多时间和精力进行SQL编写和维护的项目。

4.2 MyBatis Plus的使用场景

对于快速开发、追求效率的项目,MyBatis Plus是一个更好的选择。它特别适用于那些以单表操作为主、对数据库操作有基本需求但不希望投入过多时间进行SQL编写的项目。此外,MyBatis Plus的自动化配置和内置功能也使得它适用于快速搭建原型或进行小型项目开发。

5. 总结

MyBatis和MyBatis Plus都是SpringBoot框架中优秀的持久层框架,它们各有特点和优势。在选择使用哪个框架时,需要根据项目的具体需求、开发团队的技能和经验以及项目的规模和复杂度进行综合考虑。对于需要高度定制化SQL和精细控制数据库操作的项目,可以选择MyBatis;而对于追求快速开发、注重效率的项目,MyBatis Plus则是一个更好的选择。

相关推荐
Lojarro2 分钟前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干5 分钟前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
isolusion17 分钟前
Springboot的创建方式
java·spring boot·后端
zjw_rp1 小时前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob1 小时前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder1 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行1 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾2 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富2 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua