首页/新闻资讯/正文详情

开源社区组织AiZuDa:PanShi、MongoPlus、QingAdmin、Easy-Security

发布时间:2026/9/26 5:06:51 来源:云帆数科 栏目:资讯中心
开源社区组织AiZuDa:PanShi、MongoPlus、QingAdmin、Easy-Security
概述官网中文名爱组搭基于Spring Boot的开源低代码平台灵活、智能、强大的应用可视化设计与发布平台能够实现分钟级搭建表单、MIS、CRM、OA等智能化、免运维的各类企业SaaS系统与项目应用助力企业降本增效快速构建数据与应用中台实现业务智能化升级。提供安全、限流、监控、OSS 存储、机器人通知等多种可插拔组件用于快速构建企业级应用。理念是“每个人都是架构师”通过组件化方式提升开发效率。开源组织https://gitee.com/aizudaFlowLong另起一篇参考企业级无代码工作流引擎FlowLong简介、实战。Snail-Job另起一篇参考Snail-Job简介、原理、实战。PanShiJavaVueTypeScript实现、开源Gitee2.6K Star1.2K Fork稳定可靠的Web开发框架官方文档。后端技术栈前端技术栈JDK 17TypeScriptSpringBoot 3.XVue3.XMybatisPlus 3.XViteSpringDocElementPlusPostgreSQL、MySQL、Oracle…QingAdmin实战系统首页MongoPlus官网开源Gitee1.4K Star247 ForkGitHub75 Star11 Fork使用MyBatisPlus的方式优雅的操作MongoDB官方文档。特性无侵入只做增强不做改变引入它不会对现有工程产生影响如丝般顺滑损耗小启动即会自动注入基本CURD性能基本无损耗直接面向对象操作强大CRUD操作通用Service仅仅通过少量配置即可实现单表大部分CRUD操作更有强大的条件构造器满足各类使用需求支持Lambda形式调用通过Lambda表达式方便的编写各类查询条件无需再担心字段写错支持主键自动生成支持多达5种主键策略内含分布式唯一ID生成器-Sequence可自由配置完美解决主键问题支持自定义全局通用操作支持全局通用方法注入支持无实体类情况下的操作支持动态数据源支持逻辑删除、防止全集合更新和删除、自动填充、自动分页等等功能原理不出意外采用Maven多模块设计思路注解CollectionName集合名注解标识实体类对应的集合ID主键注解会指向MongoDB中_id字段IdTypeEnum主键类型可用枚举值描述OBJECT_ID生成mongoDB自带的_idASSIGN_UUID生成UUIDASSIGN_ULID生成ULID效率比UUID高ASSIGN_ID分配ID(主键类型为Number(Long和Integer)或String)(since3.3.0),使用接口IdentifierGenerator的方法nextId默认实现类为DefaultIdentifierGenerator雪花算法CollectionField字段注解属性类型必须指定默认值描述valueString否“”数据库字段名existboolean否true是否为数据库表字 段convertCollectboolean否false如果值时对象接收字段是集合可以使用此配置会将对象自动转为集合只存在这一个值fillFieldFill否FieldFill.DEFAULT自动填充策略typeHandlerClass?否Void.class类型处理器必须实现com.mongoplus.handlers.TypeHandler接口ignoreNullboolean否true忽略null属性isObjectIdboolean否false是否是ObjectIdMongoTransactional声明式事务标注到方法上表示该方法需要受到事务控制CollectionLogic逻辑删除开启全局逻辑删除情况下用于自定义该文档逻辑删除字段及忽略逻辑删除属性类型必须指定默认值描述valueString否“”默认逻辑未删除值该值可无、会自动获取全局配置delvalString否“”默认逻辑未删除值该值可无、会自动获取全局配置delTypeLogicDataType否DEFAULT逻辑删除字段值类型IgnoreTenant忽略多租户注解可标注在方法上优先级高MongoDs多数据源注解属性类型必须指定默认值描述valueString是“”数据源名称dsHandlerClass?否Void.class数据源处理类需实现com.mongoplus.handlers.DataSourceHandler接口提供通用Service CRUD封装泛型接口IService进一步封装CRUD泛型T为任意实体对象。基础拦截器接口com.mongoplus.interceptor.Interceptor所有拦截器都应实现此接口选择性的实现接口中的方法executeSave(documentList)添加拦截器方法executeRemove(filter)删除拦截器方法executeUpdate(queryBasic,updateBasic)更新拦截器方法executeQuery(queryBasic, projectionList, sortCond)查询拦截器方法executeAggregate(aggregateConditionList)管道拦截器方法executeCount(queryBasic,countOptions)统计拦截器方法executeBulkWrite(writeModelList)批量操作拦截器方法executeSave(documentList, collection)添加拦截器方法executeRemove(filter, collection)删除拦截器方法executeUpdate(queryBasic,updateBasic, collection)更新拦截器方法executeQuery(queryBasic, projectionList, sortCond, collection)查询拦截器方法executeAggregate(aggregateConditionList, collection)管道拦截器方法executeCount(queryBasic,countOptions, collection)统计拦截器方法executeBulkWrite(writeModelList, collection)批量操作拦截器方法高级拦截器com.mongoplus.interceptor.AdvancedInterceptor提供权限更高的操作且可直接返回数据类似MyBatis拦截器会根据所有注册的高级拦截器和普通拦截器形成拦截器责任链高级拦截器更靠近底层。TenantHandlerMongo-Plus提供的多租户处理器插件用于实现多租户的数据隔离可确保每个租户只能访问自己的数据实现数据的安全隔离。方法如下BsonValue getTenantId()获取租户idString getTenantIdColumn()获取租户字段默认tenant_idboolean ignoreCollection(collectionName)根据集合名判断是否忽略租户boolean ignoreDatabase(database)根据数据库名判断是否忽略租户boolean ignoreDataSource(dataSource)根据数据源名判断是否忽略租户boolean ignoreInsert(columns, tenantIdColumn)忽略插入租户字段逻辑CollectionNameHandler动态集合处理器可用于根据不同的条件查询不同的集合的场景。允许在运行时动态地改变MongoDB语句中的集合名这对于处理分表逻辑非常有用。提供方法String dynamicCollectionName(ExecuteMethodEnum,Object[],MongoNamespace)参数分别对应执行的方法枚举、参数、命名空间。实现CollectionNameHandler接口创建动态集合处理器并注册为Bean。如果查询参数中包含userName参数且userName参数值为张三则将集合名称修改为user_zhangsanComponentpublicclassCustomCollectionNameHandlerimplementsCollectionNameHandler{OverridepublicStringdynamicCollectionName(ExecuteMethodEnumexecuteMethodEnum,Object[]source,MongoNamespacenamespace){if(executeMethodEnumExecuteMethodEnum.QUERY){// 具体类型参数转换参考com.mongoplus.execute.Execute接口// 比如查询(executeQuery(Bson, BasicDBObject, BasicDBObject, ClassT, MongoCollectionDocument))// 对应的第0个参数类型为BsonBsonbson(Bson)source[0];BsonStringuserNamebson.toBsonDocument().getString(userName,newBsonString());if(userName.getValue().equals(张三)){returnuser_zhangsan;}}//条件不满足则返回原名称returnnamespace.getCollectionName();}}数据变动记录拦截器DataChangeRecorderInnerInterceptor不仅能够自动记录操作日志、添加到数据库还支持安全阈值控制如限制批量更新或插入的数量。方法列表setExceptionMessage(String)超出阈值提示信息setIgnoredColumnList(List)忽略的表setBatchUpdateLimit(Integer)批量更新条数上限setdisplayCompleteData(Boolean)是否显示完整数据开启后changedData字段数据量可能会很大enableSaveDatabase(BaseMapper)开启将记录信息保存到数据库setDatasourceName(String)数据源默认获取上下文中的数据源isMasterDatasource(Boolean)是否使用默认数据源保存数据如果设置datasourceName该配置会失效但切换数据源并不会失效推荐设置使用主数据源避免连续切库setDatabaseName(String)数据库默认获取上下文中对应的数据源的库setCollectionName(String)集合名默认为DATA_CHANGE_RECORD乐观锁是一种并发控制机制用于确保在更新记录时该记录未被其他事务修改。OptimisticLockerInterceptor插件使得在应用中实现乐观锁变得简单。实现步骤读取记录时获取当前的版本号version在更新记录时将这个版本号一同传递执行更新操作时设置version newVersion的条件为version oldVersion如果版本号不匹配则更新失败配置插件BeanpublicOptimisticLockerInterceptoroptimisticLockerInterceptor(){OptimisticLockerInterceptorinterceptornewOptimisticLockerInterceptor();// 修改失败后是否抛出异常抛出异常interceptor.setUpdateFailException(newRuntimeException(修改失败));// 未获取到乐观锁字段是否抛出异常interceptor.setVersionIsNullException(newMongoPlusException(未获取到乐观锁字段));// 设置乐观锁自增值interceptor.setAutoInc(1);// 是否开启重试interceptor.enableRetry(getRetryStrategy());returninterceptor;}/** * 获取重试策略 */RetrygetRetryStrategy(){returnRetry.builder()// 最大重试次数.maxRetryNum(10)// 首次命中回调.hitRetry(updateRetryResult-log.info(首次命中: updateRetryResult))// 修改成功回调.onSuccess(object-log.info(修改成功: object))// 修改失败回调.onFailure(object-log.info(修改失败: object))// 达到最大重试次数失败后的备用逻辑.fallback(((updateRetryResult,invocation)-{try{returninvocation.proceed();}catch(Throwablee){thrownewRuntimeException(e);}}))// 每次重试增加version值.autoVersionNum(1)// 重试是否继续执行后续拦截器默认为true// 如果后续的执行器中进行了某些操作请将该属性设置为false。比如在后续拦截器中做了修改其他表的操作在重试时则会修改多次.processIntercept(true)// 重试间隔时间.retryInterval(100L)// 开启异步重试会立即返回当前更新失败的响应并且异步的重试不受事务控制。可以通过回调配置查看最终结果.asyncRetry(true).build();}在实体类中需要在表示版本号的字段上添加Version注解importcom.mongoplus.annotation.collection.Version;publicclassUser{VersionprivateIntegerversion;}实战Maven项目引入依赖dependencyManagementdependencies!-- mongoplus-bom --dependencygroupIdcom.mongoplus/groupIdartifactIdmongo-plus-bom/artifactIdversion2.1.9/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement!-- springboot --dependencygroupIdcom.mongoplus/groupIdartifactIdmongo-plus-boot-starter/artifactId/dependency!-- solon生态 --dependencygroupIdcom.mongoplus/groupIdartifactIdmongo-plus-solon-plugin/artifactId/dependency!-- springboot4.X --dependencygroupIdcom.mongoplus/groupIdartifactIdmongo-plus-boot4-starter/artifactId!-- 需指定版本号 --version2.1.9/version/dependency在application.yml配置文件中添加MongoPlus相关配置mongo-plus:data:mongodb:host:127.0.0.1port:27017database:testusername:test# 用户名没有可不填若账号中出现,!等符号无需转码password:root#密码同上authenticationDatabase:admin# 验证数据库connectTimeoutMS:50000# 在超时之前等待连接打开的最长时间以毫秒为单位QingAdmin基于VUE 3.0、开源Gitee175 Star37 Fork简单易用轻后台管理框架技术栈Vue 3、TypeScript、Vite、Element Plus实战基于源码部署体验gitclone https://gitee.com/aizuda/qing-admin.gitcdqing-adminnpminstallEasy-Security官网开源Gitee108 Star16 Fork、纯Java实现、基于过过滤器实现的简单认证鉴权框架核心只关注如何获取用户和校验以及如何获取权限和校验提供自定义插件轻松扩展业务实现。官方文档。版本依赖关系javaspringeasy-security备注java82.7.x2.1.1已支持java173.x3.1.2已支持实战Maven项目引入如下依赖dependencygroupIdcom.aizuda/groupIdartifactIdeasy-security-boot-starter/artifactId/dependency

相关推荐

DBeaver数据库连接故障排查与生产级配置指南
DBeaver数据库连接故障排查与生产级配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 5:06:51

Excel复制粘贴没反应?从剪贴板到加载项的逐层排查指南
Excel复制粘贴没反应?从剪贴板到加载项的逐层排查指南

1. 问题现象与排查思路总览Excel里选中一片区域,按下CtrlC,切到另一个单元格,按下CtrlV,结果什么都没发生。光标闪了一下,状态栏没有任何提示,粘贴选项按钮也不出现。再试一次,还是没反应。重启… · 2026/9/26 5:06:45

基于深度学习的焊接缺陷检测系统实现与部署实践
基于深度学习的焊接缺陷检测系统实现与部署实践

先交代一个背景。前段时间在工厂现场蹲了一周,一根12米长的钢管,焊缝检测靠老师傅拿着强光手电一点点看,一天下来眼睛酸得直流泪,漏检率还压不下去。回来之后团队商量做一个基于深度学习的焊接缺陷检测系统,用Python把… · 2026/9/26 5:06:45

GitHub周刊第38周:阿里代码评审工具开源与智能体运行底座ECC等四大项目解析
GitHub周刊第38周:阿里代码评审工具开源与智能体运行底座ECC等四大项目解析

1. 这期周刊为什么值得你花十分钟看完做开发的人大概都有个习惯,每周总要抽点时间翻翻 GitHub 趋势榜和几个固定的技术周刊,看看这周又冒出了什么新东西。我自己这个习惯保持了好几年,踩过不少坑,也淘到过不少宝。这期 2026 年第 … · 2026/9/26 5:50:19

千元预算精准拓客:五款工具实测与ROI翻倍策略
千元预算精准拓客:五款工具实测与ROI翻倍策略

这两年,我一直在跟获客成本较劲。团队不大,预算不多,老板只看一个数字:花出去的钱,到底带回来多少单。去年我把老打法全推翻了,只留了1000块左右的试错预算,专门测市面上口碑不错的拓客工具。测… · 2026/9/26 5:50:07

从手写Loop到LangGraph Runtime:基于PostgreSQL Checkpoint的可中断恢复Agent实战
从手写Loop到LangGraph Runtime:基于PostgreSQL Checkpoint的可中断恢复Agent实战

1. 为什么我要把手写 Loop 换成 LangGraph Runtime最早做 Agent 编排的时候,我和大多数人一样,直接写一个while True循环,里面塞上模型调用、工具执行、状态判断,跑通了就上线。简单场景下这套东西确实够用,代码量少&a… · 2026/9/26 5:50:07

PostgreSQL连接报错IO error排查指南:连接池与keepalive配置避坑
PostgreSQL连接报错IO error排查指南:连接池与keepalive配置避坑

如果你在跑一条长时间查询,或者在导一个上亿行的大表,又或者应用在高峰期第一个请求就报错,而报错信息只是一句轻飘飘的An IO error occurred while sending to the backend——恭喜,你已经站在了 PostgreSQL 连接链路问题的最常见… · 2026/9/26 5:50:07

Oracle到KingbaseES迁移实战:从架构设计到SQL改造的避坑指南
Oracle到KingbaseES迁移实战:从架构设计到SQL改造的避坑指南

1. 迁移前必须想清楚的三件事先说结论:Oracle 到 KingbaseES 的迁移,本质上不是"换数据库",而是"换一套思考方式"。很多人栽跟头,不是因为工具不好用,而是因为从一开始就把迁移当成了"数据复… · 2026/9/26 5:50:07

PostgreSQL发送IO错误排查:sending to backend解析
PostgreSQL发送IO错误排查:sending to backend解析

用PostgreSQL做开发或者维护的人,多半在日志里撞见过“An IO error occurred while sending to the backend”。我第一次和它打交道,是在维护一个Java批量同步任务的时候:任务跑到一半,日志里突然冒出一行PSQLException&#xff0… · 2026/9/26 5:50:07

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码