# CurdThreeMusketeers **Repository Path**: guangxs/CurdThreeMusketeers ## Basic Information - **Project Name**: CurdThreeMusketeers - **Description**: JPA+MP+TK CURD三件套——通用CURD神器 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-08-10 - **Last Updated**: 2023-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目架构 SpringBoot Mysql JPA (SpringBoot Data Jpa)单模块 MP (Mybatis-Plus)单模块 TK (TkMybatis)单模块 集成 Swagger Knefe4j Api文档 ## 启动 - 首次启动需先创建数据库 【curd-demo】 ,并先启动Jpa模块,表会被自动创建,该要求仅限于首次启动成功前 - 若首次启动成功后,后续再次启动没有限制 - 启动类入口 com.curd.(jpa/mp/tk).*App 共三个 占用端口分别为8081-8082-8083 - 启动后点击控制台提示入口即可 > ![在这里插入图片描述](doc/img/6.jpg) ## 用户验证 - 规范起见,对所有的增删该(对数据有变更)的操作都应加入用户验证 - 此处加入模拟用户效验,测试涉及增删改操作时的checkUserId为定值12345 - 预留有通用用户验证接口,具体验证功能请按需而定 - 具体接口在 com.curd.(jpa/mp/tk).base.service包下,实现在com.curd.(jpa/mp/tk).base.service.impl包下 ## 代码架构 - MVC模式 - 动态ICO - Restful接口规范设计 - 统一Result风格 - 统一异常处理CloudException与异常拦截ControllerExceptionHandler - 通用CURD:模块通用IBaseMapper/模块通用IBaseService/模块通用IBaseController ## 通用CURD说明 ### Jpa实例 (Mp与Tk皆同) > mapper/service/controller中零代码 (IBase中已有通用可直接使用的CURD接口) > -- > ![在这里插入图片描述](doc/img/4.jpg) > 动态ICO模式 与 IBase级底层复用 > -- > ![在这里插入图片描述](doc/img/5.jpg) ## 项目测试数据截图 ![在这里插入图片描述](doc/img/7.jpg) ## 项目测试页截图 (knife4j) ![在这里插入图片描述](doc/img/1.jpg) ![在这里插入图片描述](doc/img/2.jpg) ![在这里插入图片描述](doc/img/3.jpg) # JPA+MP+TK CURD三件套——通用CURD神器 > 解释:JPA+MP+TK 分别为: >JPA: Spring Date JPA > MP: Mybatis-Plus > TK: TkMybatis - 只要用过上面的任意一种组件,我相信你会在这篇文章有所收获。 - 没有用过也不要紧这,这三件套任意一套都能让你省去很多手写代。 --- **注:以下对比皆在完全使用该组件时提供的相对参考,即在完全用到某个单一组件功能的大部分特性时所做出的对比。文章后面会提到套装组件的结合使用方案,但以下套装对比不包含在内** --- ## 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 CURD套装性能对比 > 测试场景:同一张表的数据操作速度 > > 测试项目:新增数据、更新数据、根据ID删除、根据ID获取、Excel批量导入、全部删除、全部列表 > >接口预览: > >![在这里插入图片描述](https://img-blog.csdnimg.cn/20200810145847643.png) > --- **测试数据样本为其它模块生成数据,不影响该测试,以下性能测试的其它环境基本一致,同时在API文档中进行测试,主要的测试过程省略,以下为真实统计的性能测试效果** > 测试平均耗时 >- > | 测试用例 | JPA | MP | TK | > | :----: | :-----------: | :---------: | :----------: | > | 新增更新 | 平均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在数据的增删方面速度较快,Mp和Tk大同小异 ## JPA+MP+TK CURD套装功能对比 > **JPA主要服务接口预览** > > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200810133633190.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NSMDIwMjA=,size_16,color_FFFFFF,t_70) > **MP主要服务接口预览** > > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200810133835876.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NSMDIwMjA=,size_16,color_FFFFFF,t_70) > **TK主要服务接口预览** > > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200810133950352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NSMDIwMjA=,size_16,color_FFFFFF,t_70) --- - 10000条测试数据可在公众号回复【CurdTest】获取:[三千IT屋](https://mp.weixin.qq.com/mp/qrcode?scene=10000004&size=102&__biz=MzA4MTQ5OTUyNA==&mid=100000004&idx=1&sn=e307d6a1b67a766fb5d0467592765182&send_time=1594563949)