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文件

相关推荐
郭小李10 小时前
mybatis 动态 sql
java·sql·mybatis
知守观10 小时前
技术考古:iBATIS 2.3.4 时代的持久层,是如何用 Map 玩转 307 个存储过程的?
java·后端·mybatis
captain37611 小时前
MyBatis Plus(1)
java·服务器·mybatis
代码不停17 小时前
MyBatis进阶
spring boot·mybatis
captain3761 天前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
captain3761 天前
MyBatis(进阶1)
mybatis
郭小李2 天前
mybatis的 Mapper.xml语法
xml·java·mybatis
m0_639906942 天前
MyBatis 实现分页查询|逻辑分页、物理分页、PageHelper 原理
mybatis
captain3762 天前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
正儿八经的少年4 天前
MyBatis 一对一、一对多 SQL
数据库·sql·mybatis