还在手写CURD代码?这三件套任意一套都能免去手写CURD确定不来看看?——JPA+MP+TK 免手写CURD三件套

2024-01-28 12:38

本文主要是介绍还在手写CURD代码?这三件套任意一套都能免去手写CURD确定不来看看?——JPA+MP+TK 免手写CURD三件套,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JPA+MP+TK CURD三件套——通用CURD神器

    • JPA+MP+TK CURD套装职能对比
    • JPA职能分析
    • MP与TK职能分析(两者类似)
    • JPA+MP+TK CURD套装性能对比
    • JPA+MP+TK CURD套装功能对比
    • JPA+MP+TK CURD套装使用
    • 使用方案推荐

为新手朋友提供的友情链接:CURD百度百科 // 什么是CURD


解释:JPA+MP+TK 分别为:
JPA: Spring Date JPA
MP: Mybatis-Plus
TK: TkMybatis

  • 只要用过上面的任意一种组件,我相信你会在这篇文章有所收获。
  • 没有用过也不要紧这,这三件套任意一套都能让你省去很多手写代码,直接开发核心业务。

同步项目地址

  • Gitee https://gitee.com/zhimao/Curd
  • 点此直达

注:以下对比皆在完全使用该组件时提供的相对参考,即在完全用到某个单一组件功能的大部分特性时所做出的对比。文章后面会提到套装组件的结合使用方案,但以下套装对比不包含在内


JPA+MP+TK CURD套装职能对比

执行速度:很快>快>一般>慢>很慢
难易程度:容易>简单>一般>困难>麻烦

注:以下对比分析大多是从开发应用场景大小的表数量来分析,较为客观,其它因素可自行理解分析并选择套件开发

JPA职能分析

(执行速度,难易程度)前期(速度,难易)过程(速度,难易)维护(速度,难易)
小型单体应用(0-10张表)很快,容易很快,简单快,容易
小型单体应用(10-20张表)快,容易快,简单一般,容易
小型单体应用(20-30张表)一般,一般一般,简单一般,一般
中小型单体应用(30-40张表)慢,困难慢,一般一般 ,困难
中小型单体应用(40-50张表)很慢,困难慢,一般慢 ,麻烦
中型单体应用(50+张表)很慢, 麻烦慢, 困难很慢, 麻烦

效率低原因(主观):表数量影响前期关系关联量、代码构建、后期应用维护

MP与TK职能分析(两者类似)

(执行速度,难易程度)前期(速度,难易)过程(速度,难易)维护(速度,难易)
小型单体应用(0-10张表)一般,一般很快,容易快,简单
小型单体应用(10-20张表)一般,一般很快,容易快,简单
小型单体应用(20-30张表)一般,一般很快,简单快,简单
中小型单体应用(30-40张表)慢,困难很快,一般快,简单
中小型单体应用(40-50张表)慢,困难快,一般快,简单
中型单体应用(50+张表)慢,困难快,一般快,简单

效率低原因(主观):表数量过少影响整体开发效率

  • 职能对比总结:起到绝对影响的是项目规模,在小型项目上采用Jpa开发更快更高效,而Mp和Tk同属于Mybatis,故Mp与Tk在其它条件相同的情况下的效率主要差异还是来自组件本身。排除这些因素单纯的就应用开发的表数量来说中大型应用的确不适合使用Jpa开发,而Mp与Tk理论上更适用于中大型项目,其开发与维护都相当便利。

JPA+MP+TK CURD套装性能对比

测试场景:同一张表的数据操作速度
测试项目:新增/更新数据、根据ID删除、根据ID获取、Excel批量导入、全部删除、全部列表

测试数据样本为其它模块生成数据,不影响该测试,以下性能测试的其它环境基本一致,同时在API文档中进行测试,主要的测试过程省略,以下为真实统计的性能测试效果

测试平均耗时

测试用例JPAMPTK
新增更新平均55ms,去除首次平均30ms平均47ms,去除首次平均31ms平均44ms,去除首次平均27ms
根据ID获取平均41ms,去除首次平均18ms平均19ms,去除首次平均15ms平均18ms,去除首次平均16ms
根据ID删除平均28ms,去除首次平均22ms平均32ms,去除首次平均28ms平均25ms,去除首次平均23ms
Excel批量导入(1000条)首次1330ms,去除首次平均510ms首次3105ms,去除首次平均3000ms首次753ms,去除首次平均212ms
Excel批量导入(10000条)平均4s平均30s平均1249ms
全部列表(1000条)首次213ms,平均100ms首次127ms,平均80ms首次113ms平均79ms
全部列表(10000条)暂不测试暂不测试暂不测试
全部删除(1000条)平均30ms平均3s首次3s,去除首次平均2s
全部删除(10000条)平均51ms平均29s平均29s

总结:JPA在数据的增删方面速度较快,其数据量越大效果越为显著,故Jpa的应用场景必然是小项目大数据的快速开发才能发挥出极致的作用。Mp和Tk大同小异,他们的优点就是维护,这点在大型应用上是必不可少的阶段,中大型项目必然首选项。


JPA+MP+TK CURD套装功能对比

JPA主要服务接口预览
在这里插入图片描述

MP主要服务接口预览
在这里插入图片描述

TK主要服务接口预览
在这里插入图片描述

总结:在主要服务接口上,Mp阵列明显较多,在大型且复杂应用业务中有明显的优势。就应用场景而言,小中大的单体应用采用顺序考虑采用(Jpa-Tk-Mp)为最佳。当然,每个应用都有不同的业务需求,具体的开发选择,还得根据事实而定。


JPA+MP+TK CURD套装使用

  • 具体参考源代码

同步项目地址

  • Gitee https://gitee.com/zhimao/Curd
  • 点此直达

测试数据部分内容
在这里插入图片描述

通用接口预览:
在这里插入图片描述

  • 更多使用请参考项目文档
  • 10000条测试数据可在公众号回复【CurdTest】获取:三千IT屋

使用方案推荐

以下大致说明,并非详细描述,部分表达省略请忽视

  • 规范化开发——需求->设计->开发 (流水进行)
  • 学习型开发——需求+设计+开发 (同时进行)

  • 规范化开发——采用(JPA->TK->MP(按应用规模适当选择))JPA小型,MP与TK大型
  • 学习型开发——采用(JPA+MP)双向结合适合学习中的开发

  • JPA+MP结合下篇再发例
  • 学习型开发意指学习java的其它层面的操作如Shior、Jwt鉴权,缓存,云存储,反射原理,Aop、IOC编程等,它为你在学到新的东西需要向数据库作出更变操作时提供便利。

这篇关于还在手写CURD代码?这三件套任意一套都能免去手写CURD确定不来看看?——JPA+MP+TK 免手写CURD三件套的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653657

相关文章

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

什么是 Java 的 CyclicBarrier(代码示例)

《什么是Java的CyclicBarrier(代码示例)》CyclicBarrier是多线程协同的利器,适合需要多次同步的场景,本文通过代码示例讲解什么是Java的CyclicBarrier,感... 你的回答(口语化,面试场景)面试官:什么是 Java 的 CyclicBarrier?你:好的,我来举个例

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav