• 特色

  • 正文

  • 组件依赖

  • 扩展代码

大家有用过MyBatis-Plus(简称MP)的都知道它是一个MyBatis的增强工具,致力于MyBatis的基础上只做增强不做改变,为简化开发,提高效率而生。

特点

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求整理了一份272页MybatisPDF文档

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

正文

在实际项目开发中,我们常常有把数据批量保存到数据库的需求,大家或多或少的用mybatis-plus实现过吧?

组件依赖

首先我们要通过Maven引入mybatis-plus 开源组件,在pom.xml文件加入下面的代码:

<!--mybatis--><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.4.0</version></dependency><!--mybatis plus extension,包含了mybatis plus core--><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-extension</artifactId>    <version>3.4.0</version></dependency>

通过查看源码发现API接口提供的批量插入的接口:

太火了!MyBatis Plus 为啥这么牛?
启动服务后,用Postman调试,后台打印如下:

太火了!MyBatis Plus 为啥这么牛?

从图上可以看出这个所谓的批量插入接口,其实就是一个for循环插入,Oh,My God!简直就是噩梦一般.

难不成要手工实现,这样,

INSERT INTO test (a, b, c) VALUES<foreach collection="list" item="item" separator=",">    (#{item.a}, #{item.b}, #{item.c})</foreach>

我们阅读mybatis-plus的源码,在com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn包中其实是有批量插入代码实现的,这里我就不贴源码了,大家自行跟踪一下.我们来手工扩展一下:

扩展代码

Talk is cheap, show me the code.先展示代码.再带大家慢慢解释为什么这样实现:

太火了!MyBatis Plus 为啥这么牛?

在MybatisPlusConfig文件中注入该Bean,代码如下:

@Configurationpublic class MybatisPlusConfig {    /**     * 分页插件     *     * @return PaginationInterceptor     */    @Bean    public PaginationInterceptor paginationInterceptor() {        return new PaginationInterceptor();    }    @Bean    public EasySqlInjector easySqlInjector() {        return new EasySqlInjector();    }}

还要扩展一下自带的BaseMapper,代码如下:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;import java.util.Collection;/** * 扩展通用 Mapper,支持数据批量插入 * * @author 天开易想 */public interface EasyBaseMapper<T> extends BaseMapper<T> {    /**     * 批量插入 仅适用于mysql     *     * @param entityList 实体列表     * @return 影响行数     */    Integer insertBatchSomeColumn(Collection<T> entityList);}

我们即可在业务类中,实现下面的引用了,代码如下:

/** * 定义业务mapper接口,继承刚刚扩展的EasyBaseMapper * * @author 天开易想 */@Mapperpublic interface TestMapper extends EasyBaseMapper<Test> {}/** * 业务实现类接口,即可引用 * * @author 天开易想 */@Servicepublic class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {    @Override    public Integer testBatch(Collection<Test> testList) {        return baseMapper.insertBatchSomeColumn(testList);    }

因为在BaseMapper中是不能拿来直接引用的,为什么不能直接引用,据说是只支持MySql数据库,所以作者没有内置的原因吧整理了一份272页MybatisPDF文档

更多相关文章

  1. 还在使用第三方Docker插件?SpringBoot官方插件真香!
  2. 解放双手!MyBatis官方代码生成工具给力!
  3. 还在手写任务调度代码?试试这款可视化分布式调度框架!
  4. 还在手写CRUD代码?这款开源框架助你解放双手!
  5. RabbitMQ实现即时通讯居然如此简单!连后端代码都省得写了?
  6. 还在手动部署SpringBoot应用?试试这个自动化插件!
  7. RabbitMQ实现延迟消息居然如此简单,整个插件就完事了!
  8. 我常用的IDEA插件大公开,个个是精品!
  9. 你还在代码里做读写分离么,试试这个中间件吧!

随机推荐

  1. Android获取机器显示屏幕的分辨率
  2. android tools命名空间
  3. Android学习资料分享
  4. android 去除ScrollVIew拉到尽头时再拉的
  5. Android圆形进度显示控件的SectorProgres
  6. 关于android生命周期那点事
  7. MTK Android Driver :sound
  8. 新添的Activity 要在 manifest 中注册 否
  9. android 设置 源码 修改默认主题为白底黑
  10. [置顶] android 心跳包的分析