mybatis—plus和mybatis的区别

一前置知识:

CRUD操作(create 添加数据read读取数据 update 修改数据delete删除数据)

二,总体概览

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发工作、提高开发效率而生。MyBatis-Plus 相较于原生 MyBatis 在分页查询方面具有以下优点

  1. **简化配置**:MyBatis-Plus 提供了分页插件 `PaginationInnerInterceptor`,开发者只需要在配置类中添加这个插件即可实现分页功能,而不需要像 MyBatis 那样手动编写 SQL 语句进行分页

  2. **自动分页**:MyBatis-Plus 通过拦截器在执行 SQL 语句时自动处理分页逻辑,开发者无需手动拼接 SQL 语句,简化了分页的实现过程

  3. **支持多种数据库**:MyBatis-Plus 的分页插件支持多种数据库,如 MySQL、PostgreSQL、Oracle 等,开发者可以根据使用的数据库类型进行配置,而 MyBatis 需要为每种数据库单独编写分页 SQL

  4. **性能优异**:MyBatis-Plus 的分页插件采用了内存分页技术,性能较好,尤其适合数据量大的情况

  5. **社区活跃**:MyBatis-Plus 社区活跃,遇到问题可以快速找到解决方案,而 MyBatis 虽然也有社区支持,但 MyBatis-Plus 由于其易用性,社区响应更为迅速

  6. **功能丰富**:MyBatis-Plus 提供了更多的功能,如自动填充、乐观锁、逻辑删除等,这些功能可以与分页插件一起使用,提供更全面的解决方案。

  7. **简化代码**:MyBatis-Plus 允许开发者通过继承 `BaseMapper<T>` 接口来自动获得 CRUD 功能,这意味着开发者不需要编写大量的 Mapper 接口和 XML 映射文件,从而进一步简化了代码。

  8. **易用性**:MyBatis-Plus 提供了简洁的 API 和灵活的配置选项,使得分页查询更加容易实现和维护。

总的来说,MyBatis-Plus 在分页查询方面提供了更简单、更高效、更强大的功能,极大地提升了开发效率和体验。

三,详细解说

plus和mybatis的区别:puls是增强版,在mybatis上进行了拓展,保留了mybatis的全部功能。plus全面性的优点描述网上总结了很多条可以自行百度补脑一下。下面只简单介绍一下实际开发过程中的不同。

对于业务线的开发人员来说,相比mybatis最大的优点是: 单表的增删改查以及列表分页不需要xml来写sql语句,因为plus提供了一个叫做BaseMapper的接口(在mybatis-plus-core.jar里面),其内部已经提供了相当多的crud操作方法(另外mybatis-plus-extension.jar里面的IService接口也是很类似BaseMapper支持增删改查),BaseMapper接口详细如下

只有当联表查询或者一些复杂的sql才需要像mybatis一样去建立XXXMapper.xml写sql语句,相对而言减少了开发人员的工作量。

plus跟mybatis一样有conctroller层、service层、Mapper接口层。但Mapper接口层如果只有简单的单表的增删改查以及列表分页,则像如下一样继承一下BaseMapper即可。

@Mapper

@Mapper

public interface UserMapper extends BaseMapper<User> {

// 如果有联表查询或者复杂查询,则跟mybatis一样在这里定义方法和在xml文件里面写sql语句

// 没有就建立这样一个空文件即可,改一下文件名UserMapper和对应的实体User即可

}

plus定义了那么多现成的方法如何使用呢,下面看下service层的增删改查示例

		User user = new User();
        // user.setXXX();  设置user的各种属性
        
		userMapper.insert(user); // 新增
        userMapper.selectById(user.getId()); // 根据主键id查询 where id = ?

        Map<String,Object> hashMap =new HashMap<>();
        hashMap.put("name","张三");
        hashMap.put("sex","1");
        userMapper.selectByMap(hashMap); // 根据姓名和性别来查询 where name = "张三" and sex = "1"

        List<Integer> idList = new ArrayList<>();
        idList.add(1);
        idList.add(2);
        idList.add(3);
        userMapper.selectBatchIds(idList); // 根据id批量查询 where id in (1,2,3)

        Page<User> page = new Page<>(1,10);
        EntityWrapper<User> entityWrapper = new EntityWrapper<>();
        entityWrapper.ge("id", 100);
        userMapper.selectPage(page,entityWrapper); // 分页查询 where id > 100 limit 1,10

        // EntityWrapper 是用来做稍微复杂一点的查询的(plus的BaseMapper里定义的方法不能实现你的需要时用这个)
        // 或者用LambdaQueryWrapper,用法以及内置方法与EntityWrapper 是一样的
        EntityWrapper entity = new EntityWrapper();
        entity.allEq(hashMap); // 全等于 where feild1 = key1 and feild2 = key2 and  ...
        entity.eq("name","张三"); // where name = "张三"
        entity.ne("name","张三"); // where name != "张三"
        // 类似的还有 gt le like notlike orderBy groupBy having等等

        entity.where("id > 100").orNew("id = 10").and("age = 25"); // where id > 100 or (id = 10 and age = 25)

使用后的体验:封装了简单的查询方法,也提供了自定义的查询方法,有点像hibernate的模式了。但总体而言确实减少了不少的sql和xml文件

相关推荐
Tatakai252 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis
A_cot3 小时前
Redis 的三个并发问题及解决方案(面试题)
java·开发语言·数据库·redis·mybatis
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑4 小时前
苍穹外卖学习笔记(七)
java·windows·笔记·学习·mybatis
二十雨辰6 小时前
[苍穹外卖]-12Apache POI入门与实战
java·spring boot·mybatis
Amagi.8 小时前
Redis的内存淘汰策略
数据库·redis·mybatis
执键行天涯13 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
工业甲酰苯胺13 小时前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
ggdpzhk15 小时前
Mybatis 快速入门(maven)
oracle·maven·mybatis
Java小白笔记1 天前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
计算机学姐1 天前
基于SpringBoot+Vue的篮球馆会员信息管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis