plus很好 mybatis 但是我被它坑了! (plus有用吗)
本文目录导航:
mybatis plus很好,但是我被它坑了!
在开发后盾信息发送性能时,作者应用了mybatis plus 的 saveBatch() 方法启动多用户信息批量发送。
测试环境测试无误后,预颁布阶段发现接口照应期间意外,到达5至6秒。
登录预颁布环境检查口头日志,发现正是 saveBatch() 方法口头效率低下造成疑问。
mybatis plus 是一个盛行的 ORM 框架,提供多种便利性能,包括代码生成器、通用 CRUD、分页插件、失望锁插件等,提高开发效率。
本文所用 mybatis plus 版本为3.5.2。
代码展现中,saveNotice() 方法用于保留通知信息和用户通知记载,关键流程包括前两步耗时较少,关注第三步操作耗时。
联合 SQL 口头日志剖析,发现批量保留用户通知记载是一条条口头,猜想是批量拔出造成效率低下。
经常使用 mybatis free log 插件打印完整 SQL,明晰显示批量操作疑问。
mybatis plus 的批量操作底层经常使用的是 mybatis 的 batch 形式成功,而 mybatis 的 batch 形式底层经常使用 JDBC 驱动提供的批量操作形式。
经过 mybatis log free 插件检查底层源码,发现 mybatis plus 在 executeBatch() 方法内经常使用 for 循环口头拔出操作。
测试环境耗时较快的要素在于,测试时批量保留的用户通知记载较少,而在预颁布环境批量记载数量大幅参与,造成口头缓慢。
联合源码剖析,mybatis plus 批量操作实践上是在口头批处置操作时,由 JDBC 驱动担任。
为处置耗时疑问,可以调整 JDBC 衔接 URL 中的参数 rewriteBatchedStatements=true,确保驱动在口头批量操作时能够有效口头。
MySQL JDBC 驱动在自动状况下或者不会应用批处感性能,将其视为单条操作口头,造成性能低下。
经过设置 rewriteBatchedStatements=true 参数,驱动将尝试从新编写 SQL 语句,以更高效的形式口头批量拔出、降级和删除操作。
实施调整后,检查口头耗时结果,发现经过在 JDBC URL 中参与参数 rewriteBatchedStatements=true,批量操作口头期间清楚降低至200毫秒,成功处置了 mybatis plus saveBatch() 方法口头效率低下的疑问。
mybatis plus 只管提供了便利,但也存在潜在的性能疑问,尤其是在批量操作时。
开发人员应留意审核名目中的 JDBC URL 能否蕴含了 rewriteBatchedStatements=true 参数,防止重复产生疑问。
本文示例旨在提示开发者留意此类疑问,确保高效、稳固的系统运转。
关注群众号【waynblog】,失掉更多技术干货、开源名目、实战阅历、国外优质文章翻译等信息,您的关注将是我继续降级的能源。
mybatis plus很好,但是我被它坑了!
在开发环节中,经常使用了盛行的 ORM 框架 MyBatis Plus,其提供了一些便利性能,如代码生成器、通用 CRUD、分页插件、失望锁插件等,以提高开发效率。
在处置发送信息性能时,尝试经常使用 MyBatis Plus 的 saveBatch() 方法批量保留通知信息,但在预颁布环境中发现接口照应速度意外缓慢,耗时5-6秒,最终发现是 saveBatch() 方法造成的疑问。
MyBatis Plus 基于 MyBatis,提供方便的数据库操作形式。
在处置批量操作时,MyBatis Plus 经常使用 MyBatis 提供的 executeBatch() 方法成功,经过 for 循环口头拔出操作。
该框架在设计时思考了开发便利性,但并未针对少量数据批量操作的性能提升。
在测试环境和预颁布环境中的差异,提醒了这一潜在疑问。
当测试环境中的通知记载较少时,saveBatch() 方法口头较快。
但是,预颁布环境中须要处置数百条记载,造成口头期间清楚参与。
这一现象标明,MyBatis Plus 的批量操作机制在处置大规模数据时效率较低。
深化剖析 MyBatis Plus 的底层成功,发现其批量操作逻辑并未针对性能启动提升。
为处置这一疑问,可以思考在 JDBC 衔接 URL 中参与 `rewriteBatchedStatements=true` 参数。
这一参数准许 MySQL JDBC 驱动在口头批量操作时,从新编写 SQL 语句,以更高效地口头批量拔出、降级和删除操作。
MySQL JDBC 驱动在自动状况下或者不会口头批量操作,而是逐条口头 SQL 语句,造成性能降低。
经过参与 `rewriteBatchedStatements=true` 参数,MySQL JDBC 驱动将能够识别并口头批量操作,清楚缩小口头期间。
测试结果标明,在参与此参数后,批量操作口头期间从数秒降低至200毫秒,有效处置了 MyBatis Plus 提供的 saveBatch() 方法口头耗时较高疑问。
总结而言,MyBatis Plus 只管提供了方便的数据库操作形式,但在处置大规模数据时,其批量操作性能存在局限。
为提升性能,开发者应关注 JDBC 驱动性能,确保 `rewriteBatchedStatements=true` 参数的正确设置。
经过正当性能,可以防止在批量操作中掉入性能瓶颈,提高开发效率。
关注群众号【waynblog】,每周失掉技术干货、开源名目分享、实战阅历及国外优质文章翻译等。
您的关注是推进降级的能源!
mybatisplus比mybatis好在哪里?
在讨论MyBatisPlus与MyBatis之间的差异时,咱们须要首先了解它们各自的外围性能和个性。
MyBatisPlus作为MyBatis的增强版本,旨在简化经常出现操作的成功,提供更丰盛的API和方便的性能,特意是关于代码生成和版本管理。
在处置业务并发疑问时,例如秒杀场景,失望锁成为了处置高并发下数据分歧性的关键手腕。
MyBatisPlus经过引入失望锁机制,成功了在降级操作中智能处置并发抵触。
当多人尝试同时修正同一数据时,失望锁经过审核版本号(version)来判别能否已有其余操作扭转了数据。
若版本号分歧,则口头降级操作;反之,则提示抵触,防止了数据的不分歧性和脏读疑问。
失望锁的成功经过在实体类中参与版本字段(version),并在降级操作时审核版本号能否婚配。
当口头降级操作时,MyBatisPlus智能在SQL语句中参与版本比拟逻辑,例如经常使用`UPDATE t_user SET ... WHERE version = #{version} AND id = #{id}`。
若版本号不分歧,则SQL口头失败,标明数据已被其余操作更改,从而防止了并发抵触。
代码生成器是MyBatisPlus的另一个弱小性能,它能够智能生成SQL语句和对应的Java实体类,极大地提高了开发效率。
生成器理论基于模板和性能文件上班,能够依据数据库表结构智能生成对应的DAO、实体类以及关系代码。
经过性能,开发人员可以定制生成的代码结构、目录位置以及能否蕴含某些特定的注解(如lombok的@Data)等,确保生成的代码合乎名目需求。
在代码生成器的成功中,MyBatisPlus提供了一系列的性能选项,包括数据库衔接信息、生成代码的目录、以及须要生成的表名等。
经过这些性能,生成器能够智能地为每个表生成对应的Java文件,包括DAO接口、实体类以及关系逻辑。
生成的代码理论蕴含必要的注解(如lombok的@Data),以简化类的经常使用,并且理论蕴含失望锁机制,确保在高并发场景下的数据分歧性。
经过上述性能,MyBatisPlus不只简化了经常出现的CRUD操作,还提供了弱小的并发管理机制和代码智能化工具,使得开发人员能够愈加专一于业务逻辑的成功,缩小了重复性上班,提高了开发效率和代码品质。