首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.7-2024 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.7-2024</version> </parent> 本次更新内容 1. 数据请求全面采用 json 格式数据提交,增加前端参数加密和后端响应加密功能。 2. 修改代码生成器,单个对象字段要是实体类,会抛出异常,需要进行相应的处理。 3. 修改后台vue3代码生成模板 4. 新增用户搜索注解 5. 新增系统判断,解决不能在mac系统代码生成的问题 6. 修改后台代码生成器模板代码 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 支持 jpa,mybatis-plus 等数据库 orm。内置一套访问数据的注解 DSL 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 项目最佳实践:https://gitee.com/quhaodian/nbsaas-mall2 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.6-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.6-2023</version> </parent> 本次更新内容 1. 数据请求全面从没用json格式数据提交,增加前端参数加密和后端响应加密功能。 2. 修改vue3代码生成模板 3. 增加@EncryptionData注解,放到参数上,后台认为请求需要加密,进行解密。放到方法头上,aes加密响应请求。 4. 增加 mybatis mapper文件夹生成Command 5. 增加数据库逻辑删除代码生成功能 6. 修改后台代码生成器模板代码 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 支持jpa,mybatis-plus等数据库orm。内置一套访问数据的注解DSL 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 项目最佳实践:https://gitee.com/quhaodian/nbsaas-mall2 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.4-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.4-2023</version> </parent> 本次更新内容 1. 增加@Dict@DictItem注解,方便字典类型数据显示 2. DataRequest对象重构成Request对象,SearchRequest对象重构成Search对象 3. 修改代码生成模块Request对象,SearchRequest对象相关模块 4. 增加PageExtResponse对象,方便列表数据增加其他属性。 5. 增加NeStrategy,支持ne查询。 6. 调整FilterGroup等类型,这样兼容dubbo3 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 搜索模型 @Data public class ArticleSearch extends PageRequest implements Serializable { /** * 主键id ==查询 **/ @Search(name = "id", operator = Operator.eq) private Long id; /** * 文章标题 模糊查询 **/ @Search(name = "title", operator = Operator.like) private String title; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.3-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.3-2023</version> </parent> 本次更新内容 1. 升级 spring-boot 版本,升级shiro版本1.13.0 2. 增加SearchData注解,方便在搜索的适合通过aop进行数据拦截 3. 增加控制操作区域是否显示属性 4. 新增ExtResourceCommand ,处理生成代码的时候生成扩展模块文件夹。 5. 搜索模块支持or条件搜索。 6. 修改通过注解提取模型数据。 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.1.2-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.1.2-2023</version> </parent> 本次更新内容 1. 升级spring-boot版本 2. 增加统一异常处理类,方便在业务系统中统一处理异常返回结果 3. 增加租户统一请求对象基类 4. java8 兼容 caffeine cache 5. 修复el-select对象代码中数据请求url错误的问题。 6.修改java版本兼容问题,最低要求java8 nbsaas-boot 具有以下特点: 自动建表:nbsaas-boot 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:nbsaas-boot 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:nbsaas-boot 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:nbsaas-boot 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

高效数据传输:Java通过绑定快速将数据导出至Excel

摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 把数据导出至 Excel 是很常见的需求,而数据的持久化,往往又放在数据库中。因此把数据库中的数据导出到 Excel中,成了非常普遍的一个需求。 以关系型数据库为例,数据表是一个二维矩阵,但是为了易于操作和维护,在数据读取中,都会定义类,并且以对象的形式在内存中存放数据。但是Excel的工作表又是另一个二维矩阵,这就意味着,从数据库读取出的对象数据,又需要循环写入另一个表格中,这使得代码难以维护。 为了解决数据不易维护的问题,可以给工作表,单元格或者表格设置对象及单元格的绑定关系,这样在保存时便可以根据数据源的绑定关系,自动填充数据。 具体实现方法 现有数据类如下: public static class SalesRecord { public int sales; public String productType; public String product; public String salesman; public String area; } public static class SalesData { public ArrayList records; } 样本数据如下: private SalesData getDataSource() { // 创建数据源 SalesData datasource = new SalesData(); datasource.records = new ArrayList(); // 添加数据 SalesRecord record1 = new SalesRecord(); record1.area = "NorthChina"; record1.salesman = "Hellen"; record1.product = "Apple"; record1.productType = "Fruit"; record1.sales = 120; datasource.records.add(record1); SalesRecord record2 = new SalesRecord(); record2.area = "NorthChina"; record2.salesman = "Hellen"; record2.product = "Banana"; record2.productType = "Fruit"; record2.sales = 143; datasource.records.add(record2); SalesRecord record3 = new SalesRecord(); record3.area = "NorthChina"; record3.salesman = "Hellen"; record3.product = "Kiwi"; record3.productType = "Fruit"; record3.sales = 322; datasource.records.add(record3); return datasource; } 1.数据源绑定至工作表 下面是给工作表设置数据源绑定的代码,其中setAutoGenerateColumns设置为false,当setAutoGenerateColumns为true 时,工作表会根据数据源自动生成列。 public void SheetBinding() { // 创建一个新的workbook Workbook workbook = new Workbook(); // 获取默认sheet IWorksheet worksheet = workbook.getWorksheets().get(0); SalesData datasource = getDataSource(); // 自动生成列设置为false worksheet.setAutoGenerateColumns(false); // 给工作表中的每一列绑定数据源 worksheet.getRange("A:A").getEntireColumn().setBindingPath("area"); worksheet.getRange("B:B").getEntireColumn().setBindingPath("salesman"); worksheet.getRange("C:C").getEntireColumn().setBindingPath("product"); worksheet.getRange("D:D").getEntireColumn().setBindingPath("productType"); worksheet.getRange("E:E").getEntireColumn().setBindingPath("sales"); // 设置数据源 worksheet.setDataSource(datasource.records); // 保存为Excel文件 workbook.save("output/SheetBinding.xlsx"); } 实现效果如下: 2.数据源绑定至单元格 // 创建workbook Workbook workbook = new Workbook(); // 获取默认的sheet IWorksheet worksheet = workbook.getActiveSheet(); // 添加数据 SalesRecord record = new SalesRecord(); record.area = "北方"; record.salesman = "李强"; record.product = "苹果"; record.productType = "水果"; record.sales = 120; // 给单元格设置绑定 worksheet.getRange("A1").setBindingPath("area"); worksheet.getRange("B2").setBindingPath("salesman"); worksheet.getRange("C2").setBindingPath("product"); worksheet.getRange("D3").setBindingPath("productType"); // 设置数据源 worksheet.setDataSource(record); // 保存为Excel workbook.save("output/CellBinding.xlsx"); 实现效果如下: 3.数据源绑定至表格 下面的代码使用了setExpandBoundRows ,ITable.setExpandBoundRows方法用来处理一个绑定的表格对数据源的更改该如何响应。当属性设置为true时,该绑定表格会使用整行操作自动调整行数以适应数据源更改。 // 创建workbook Workbook workbook = new Workbook(); // 获取默认的sheet IWorksheet worksheet = workbook.getActiveSheet(); SalesData datasource = getDataSource(); // 添加一个表格 ITable table = worksheet.getTables().add(worksheet.getRange("B2:F5"), true); // 设置表格,不自动生成列 table.setAutoGenerateColumns(false); // 给表格设置绑定path table.setBindingPath("records"); // 设置setExpandBoundRows为true, table.setExpandBoundRows(true); // 设置表格列的数据字段 table.getColumns().get(0).setDataField("area"); table.getColumns().get(1).setDataField("salesman"); table.getColumns().get(2).setDataField("product"); table.getColumns().get(3).setDataField("productType"); table.getColumns().get(4).setDataField("sales"); // 设置数据源 worksheet.setDataSource(datasource); // 保存为excel workbook.save("output/TableBinding.xlsx"); 实现效果如下: 总结 通过给工作表、单元格或表格设置数据源绑定关系,可以实现将数据库中的数据导出到Excel的功能。这种方法使用对象和属性的绑定关系,将内存中的数据源与Excel中的工作表、单元格或表格进行连接。这样,在保存数据时,只需要根据数据源的绑定关系自动填充数据,而无需手动循环写入。这种实现方式简化了代码,提高了代码的可维护性和可扩展性。同时,通过设置自动生成列、设置绑定路径以及处理数据源变化等操作,还可以进一步增强导出功能的灵活性和适应性。总的来说,这种数据源绑定的方法为数据导出提供了一种优雅而高效的解决方案。 扩展链接: 从表单驱动到模型驱动,解读低代码开发平台的发展趋势 低代码开发平台是什么? 基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.0.18-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.0.18-2023</version> </parent> 本次更新内容 1. 修复部分操作不支持多层搜索功能,例如: @SearchBean(items = {@SearchItem(label = "文章分类", name = "categoryName", key = "article.catalog.name", operator = Operator.like)}) 2.优化了vue代码生成模板,支持element-plus中的tree选择,移除了以前的无效主题。 3. 修改了公共组件中的字典功能 4. 优化了 nbsaas-admin 中用户管理模块 5. 修改了vue3中的状态管理,解决页面跳转返回以后重置页面条件的问题 6. 增加数据权限控制相关注解 boot-nbsaas 具有以下特点: 自动建表:boot-nbsaas 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:boot-nbsaas 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:boot-nbsaas 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:boot-nbsaas 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

JeeSite V5.5.0 发布,升级 Antd v4.0,Java 快速开发平台

升级内容 升级 spring boot 2.7.14、justauth 1.16.5、antdv 4.0.0 调整 语法 html 和 js 编写不同的占位符,减少IDE标红提示 新增 支持数据源独立设置XA开关,如 jdbc.数据源名.xa: false 新增 当前用户展示子系统列表过滤,进入角色管理中配置包含系统 新增 js ajax 下载 clearParams 参数,可清理掉不需要添加的请求参数 优化 子系统,角色增加包含系统参数,切换系统时只需展示当前用户包含的子系统 优化 fileupload 增加缩略图生成设置,前端组件可使用 imageThumbName 使用缩略图 优化 fileupload 使用 returnPath 时的下载还原原始文件名 优化 翰高数据库有原来的 oracle 语法换为原生 postgresql 语法 优化 导出,查询后默认不添加 pageNo 参数 优化 界面,默认隐藏表单右上角按钮 修正 jquery migrate 版本,处理ie9下的一些兼容问题 修正 GBase 数据库,多余的 remarksReporting 属性问题,支持设置为空 修正 SqlServer2012 驱动下初始化库报 OFFSET 错误问题 修正 树表更新子节点状态,字段名错误问题(所有版本) 修正 初始化库的时候 area 表没有插入数据问题 优化 用户头像获取接口,排除 http 的地址,不增加 ctxPath 其它细节更多改进... Vue分离端 升级 antdv4.0.0、vite4.4.9 等等 新增 ListSelect 组件 queryParams 参数 新增 Upload 组件 图片最大宽高的压缩参数 新增 Upload 组件 缩略图生成预览参数支持 新增 对话框弹窗、路由页签的弹窗表单例子 新增 downloadByUrl post 带参数下载文件 新增 iframe 支持 query 参数接受 新增 BpmButton initialize 事件 优化 国际化语言包完善(用户组织公司岗位个人中心) 优化 在线用户列表查询换 Switch 组件 优化 权限类型的菜单也可以设置组件名称 优化 升级 antdv4 后的整体配色、布局等细节 简化 视图组件名称,直接通过 name 统一设置 修正 解决 Radio 组件 onChange 调用 2 次的问题 升级方法 修改pom.xml文件中的jeesite-parent版本号为5.5.0-SNAPSHOT 如果你修改了parent、common、core项目源码,请与git上的代码进行同步 如果你是跨版本升级,请注意每一个版本的升级方法,业务上有调整的地方进行修改 关于 Beetl 语法 html 和 js 编写不同的占位符,查找替换方法(使用正则表达式、全字匹配): \$\{@DictUtils\.getDictListJson\(\'(.+?)\'\)\}替换为"#\{@DictUtils\.getDictListJson\(\'$1\'\)\}" \$\{toJson\((.+?)\)\}替换为"#\{toJson\($1\)\}" \/\/\<\% (.+?) \%\>替换为//# $1 执行root/package.bat(sh)打包脚本,强制更新依赖。 Vue分离端升级 请与jeesite-vue代码仓库源码进行同步,合并代码,手动解决冲突代码。 Antdv 4.0 相比 3.2 改动还是比较大的,遗弃和修改了很多内容,但是您也无需担心升级的问题 由于 JeeSite 封装了各种业务组件,所以业务代码上变化不是很大,您对 JeeSite 改动越少,升级越容易 请先了解 Ant Design Vue 4.0 的升级指南:https://antdv.com/docs/vue/migration-v4-cn(opens new window) 全局替换,匹配文件*.vue,*.ts,*.tsx(区分大小写、全字匹配,注意排除掉 css、sys.ts 文件): dropdownClassName替换为popupClassName visible替换为open 关于 antdv4 样式 less 替换 CSS-in-JS 实现动态主题 为了方便升级 jeesite 保留了 less,减少升级难度 同时支持 CSS-in-JS 提供更好的动态主题支持 业务中的样式可通过 css and 选择器,可覆盖 antdv 中的样式 匹配后端版本为JeeSite v5.5.0 了解更多 JeeSite 官网地址:http://jeesite.com JeeSite 在线文档:http://docs.jeesite.com JeeSite 演示地址:http://demo.jeesite.com JeeSite Vue 演示地址:http://vue.jeesite.com JeeSite 源码仓库:https://gitee.com/thinkgem/jeesite4 JeeSite Vue 前端源码:https://gitee.com/thinkgem/jeesite-vue JeeSite 跨平台手机端:https://gitee.com/thinkgem/jeesite4-uniapp JeeSite Cloud 微服务:https://gitee.com/thinkgem/jeesite4-cloud JeeSite 客户端安装程序:https://gitee.com/thinkgem/jeesite-client

优秀的个人博客,低调大师

企业级快速开发框架 nbsaas-boot 1.0.15-2023 发布了

<parent> <groupId>com.nbsaas.boot</groupId> <artifactId>nbsaas-boot</artifactId> <version>1.0.15-2023</version> </parent> 本次更新内容 1.后台模块增加shiro权限注解,前台添加菜单的时候需要配置权限标签,不然会报406错误 2.vue代码模板增加添加数据加载动画功能 3.修改了vue代码生成模板和jpa代码生成模板 4.优化了nbsaas-admin模块部分功能 5.增加基础功能模块 nbsaas-boot-starter,微信支付模块。基础功能引入pom就好了。 6.优化了nbsaas-admin-vue3视图页面 boot-nbsaas 具有以下特点: 自动建表:boot-nbsaas 提供了自动建表功能,根据用户定义的数据模型自动生成数据库表结构,减少手动操作,提高开发效率。 开发规范:boot-nbsaas 提供一套开发规范,包括代码风格、命名规范、注释规范等,使团队开发更加规范化和高效化。 代码生成器:boot-nbsaas 提供代码生成器,根据数据模型自动生成前端和后端代码,提高开发效率和代码质量。 多租户支持:boot-nbsaas 支持多租户,为不同客户提供独立的数据存储空间和访问权限,保证数据安全性和隔离性 通过 Command 处理复杂的业务 InputRequestObject context = new InputRequestObject(); context.setConfig(config); context.setFormBean(formBean); new DomainCommand() .after(new ApiCommand()) .after(new ConvertCommand()) .after(new ControllerFrontCommand()) .after(new RestCommand()) .after(new ExtApiCommand()) .after(new RepositoryCommand()) .after(new FieldCommand()) .after(new FinishCommand()).execute(context); 模型构建 @CatalogClass @FormAnnotation(title = "组织架构管理", model = "组织架构", menu = "1,27,88") @Data @Entity @Table(name = "sys_structure") public class Structure extends CatalogEntity { @FormField(title = "父分类名称") @Comment("父分id") @FieldName @FieldConvert(classType = "Integer") @ManyToOne(fetch = FetchType.LAZY) private Structure parent; @OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") private List<Structure> children; } 通过模型数据提取,然后通过代码生成器生成后端代码 + vue3 后端管理代码 基础功能项目 https://gitee.com/cng1985/nbsaas-boot-starter 项目脚手架 https://gitee.com/cng1985/nbsaas-admin vue3 后台管理脚手架 https://gitee.com/cng1985/nbsaas-admin-vue3

优秀的个人博客,低调大师

Jmix 1.5 新功能概览 - 企业级少代码 Web 快速开发框架

最近我们发布了 Jmix 的最新 1.5 正式版本。本文中,我们将介绍 1.5 版本中引入的主要新功能和改进。 如需了解更新的详细信息以及如何升级,请参考 Jmix 文档中的 最近更新 部分。 Studio UI/UX 改进 首先我们看一下在更新了 Studio 后你可能发现的一些 UI 层面的变化。 我们通过对不熟悉 Jmix 的开发者进行几轮的测试后发现,当前的 UI 可视化设计器有些过于复杂了。对于第一次使用 Studio 的用户来说,三个工具窗口和多个 XML 编辑和界面预览面板容易使人感到不知所错。另外,我们发现用户更偏向使用当前编辑器窗口顶部的操作面板,并且更习惯通过点击鼠标右键查找可用的功能。 因此,我们决定移除静态的组件工具箱面板,而改为通过几种不同的方式打开工具箱弹窗的交互模式。这几种不同的方式包括:从顶部操作面板打开,从组件层级结构的右键菜单打开,以及从源代码编辑器中的 「Generate」 菜单打开。新的工具箱弹窗支持搜索可用组件,也支持将组件拖放至 UI 层级结构或者源码中: ▲ Studio 添加组件 UI 组件层级结构和组件属性面板现在合并成了单一的工具窗口,称为 Jmix UI,默认位于 IDE 的右侧。因此,UI 可视化设计器最后仅保留一个工具窗口,而组件工具箱可以通过不同的方式打开。 Studio 界面中的另一个不太好用的功能是 「Code Snippets」 工具箱。尽管对于没有 Jmix 开发经验的人来说,这个功能非常有用,但是却很难被注意到。所以,我们也修改了这个面板的展示方式:现在,在编辑 Spring bean 或者 UI 控制器时,可以通过顶部操作面板的按钮或者 「Generate」 菜单打开,并且代码段的窗口也是以弹窗的方式展示。 ▲ Studio 代码片段 Flow UI 改进 我们一直在持续改进 Flow UI 的功能,使其更接近作为 Jmix 中主要的 UI 技术这一目标。 在这个版本中,我们将 Flow UI 的核心升级到 Vaadin 23.3 并且集成了几个新的组件。 TabSheet 当需要将大量 UI 组件放入单个视图时,TabSheet 是必不可少的。使用 Jmix 最常见的场景就是开发类似 ERP 这样的后台系统,而这种系统中,TabSheet 是一个典型需求。 在以前的版本中,Jmix 只提供了 Tabs 组件,该组件并不是容器,需要在不同的布局之间进行编程切换。而 Vaadin 23.3 提供了功能齐全的 TabSheet,这样我们可以完全用声明式的方式集成: <tabSheetwidth="100%"> <tabid="mainTab"label="Main"> <formLayoutid="form"dataContainer="userDc">...</formLayout> </tab> <tabid="additionalTab"label="Onboardingsteps"> <vbox> <hbox>...</hbox> <dataGridwidth="100%"dataContainer="stepsDc">...</dataGrid> </vbox> </tab> </tabSheet> ▲ Flow UI TabSheet MultiSelectComboBox 在最新的 Vaadin 中也提供了多选下拉框组件,使用该组件用户可以在下拉列表中选择多个值,并且在字段中很好地显示选择的内容。我们已经在 Jmix 集成该组件,并添加了数据绑定,因此可用于展示或修改实体的集合属性。下面的示例中,我们用这个组件管理产品和标签的多对多关系: <instanceid="productDc" class="com.company.demo.entity.Product"> <fetchPlanextends="_base"> <propertyname="tags"fetchPlan="_base"/> </fetchPlan> <loader/> </instance> <collectionclass="com.company.demo.entity.Tag"id="allTagsDc"> <fetchPlanextends="_base"/> <loaderid="allTagsDl"> <query> <![CDATA[selectefromTage]]> </query> </loader> </collection> <!--...--> <formLayoutid="form"dataContainer="productDc"> <textFieldid="nameField"property="name"/> <multiSelectComboBoxproperty="tags"itemsContainer="allTagsDc"/> </formLayout> ▲ Flow UI MultiSelectComboBox 上传控件 基于 Vaadin 的 Upload 组件,我们开发了两个 Flow UI 的组件:FileStorageUploadField 和 FileUploadField。前一个用来将文件上传至文件存储,返回 FileRef 对象,可以保存在实体属性中。后一个返回字节数组,这个字节数组是直接保存在一个实体中的。 这两个组件的声明式用法非常简单:只需要设置一个带有实体实例的数据容器,然后配置 FileRef 或字节数组类型的实体属性名称即可: <fileStorageUploadFieldid="uploadField" dataContainer="userDc"property="picture"/> 图片 图片组件现在也支持 Jmix 的数据绑定,可以绑定至 FileRef 或字节数组类型的实体属性: <imageid="image" dataContainer="userDc"property="picture" height="280px"width="200px"classNames="user-picture"/> 如果需要配置图片的放置方式,可以用 CSS 样式。例如,需要在缩放图像同时保持其宽高比,可以创建下面这个 CSS 类,并在组件的 classNames 属性中指定: .user-picture{ object-fit:contain; } Tooltip Tooltip(提示窗)可以在 UI 组件旁边的小弹窗中展示组件的附加信息。鼠标悬停或者键盘聚焦都可以维持它的展示状态。 对于支持提示窗的组件,Studio UI 设计器会在组件属性面板展示 Add 按钮: ▲ Flow UI 添加提示窗 在 XML 中则是通过组件内部的元素定义: <textFieldid="nameField"property="name"> <tooltiptext="Productname"position="BOTTOM_START"/> </textField> ▲ Flow UI 提示窗 通用过滤器 过滤器是经典 UI 中最受欢迎的组件之一,支持用户根据不同的条件筛选数据,包括实体属性、引用、JPQL 查询和条件运算符。打个形象的比喻,过滤器就像是一把用于结构化数据搜索的瑞士军刀,开发人员只需在界面中放置过滤器,用户就可以自定义并按需使用。 在 Jmix 1.5,我们在 Flow UI 中添加了具有基本功能的通用过滤器:用户可以基于整个实体关系图创建任意数量的属性条件。与 Flow UI 中的其他组件一样,过滤器也是响应式的: ▲ Flow UI 响应式过滤器 而且,对于响应式的 breakpoints,过滤器还支持在其内部 XML 元素 responsiveSteps 进行配置: <genericFilterid="filter"dataLoader="usersDl" summaryText="Myfilter"> <responsiveSteps> <responsiveStepminWidth="0"columns="1"/> <responsiveStepminWidth="800px"columns="2"/> <responsiveStepminWidth="1200px"columns="3"/> </responsiveSteps> </genericFilter> 显然,过滤器是有状态的,而且在不同的视图之间导航或刷新网页时应保持其状态。否则,用户设置过的筛选条件将会丢失,例如,在详情页编辑数据后返回列表页的情况。Jmix 提供了 queryParameters facet,用于保存当前 URL 和筛选条件的映射,这样可以确保在不同的视图间导航时过滤器能保持正确的过滤状态,并且能提供包括筛选条件在内的页面深度链接(Deep link)。Facet 的最简单配置就是直接设置它所控制的过滤器组件: <facets> <queryParameters> <genericFiltercomponent="filter"/> </queryParameters> </facets> 通用过滤器的研发还在继续,我们计划在 2023 年 6 月的版本中让 Flow UI 的过滤器具有通用 UI 过滤器的所有功能。 带有 Flow UI 的扩展组件 在 1.5 中,我们为下列开源组件提供了 Flow UI: 多租户 Quartz 定时任务 应用程序设置 表格导出操作 在使用 Flow UI 的项目中可以直接通过 Studio 的扩展组件市场安装。 Flow UI 菜单 Flow UI 中的主菜单结构与经典 UI 不同:每个扩展组件都有自己的根节点菜单、有预定义的顺序,而且没有通用的 “管理” 菜单。对于试验和原型系统来说,这种默认的菜单结构已经够用,但对于实际的应用来说,往往还是需要一个自定义的菜单结构。因此,可以从 “Composite” 模式切换到 “Single” 模式并定义自己的菜单结构。 以前,许多开发人员尽可能避免使用 “Single” 模式,因为在项目中添加新扩展组件时,这种模式会有问题:新扩展组件的菜单项没有出现在主菜单中,并且不清楚要怎么添加。 现在,这个问题已经在 Flow UI 的菜单设计器中得到解决。一旦切换到 “Single” 模式,设计器就会在左侧显示一个包含扩展组件所有菜单项的面板,这些菜单也可以在主菜单使用。这样一来,在添加了新的扩展组件之后,只需要将扩展组件的菜单拖放到主菜单中合适的位置即可。 ▲ Flow UI 菜单设计器 Excel 导出 Jmix 应用程序中最常用的功能之一是能够一键将 UI 表格中展示的数据导出到 Excel。这个功能在最初设计时是用来精确导出用户当前能看到的所有数据,即通过过滤器选择的当前页面的数据。但是很多时候用户希望能导出过滤器筛选的所有数据,而不仅仅是当前页面。 在 1.5 中,我们改进了表格导出操作扩展组件提供的 excelExport 操作。现在,如果用户在导出对话框中选择 “所有行”,则会导出所有数据。考虑到性能和服务器内存使用情况,数据加载会分批次执行。 该功能同时支持经典 UI 和 Flow UI。 悲观锁 UI Jmix 现在提供了一个用于管理悲观锁的默认 UI。位于经典 UI 的 “管理” 菜单和 Flow UI 的 “系统” 菜单中。 系统管理员可以查看当前锁的列表,并在需要时进行手动删除。 Liquibase changelog Jmix 的一个优势是能帮助开发人员创建和运行用于数据库版本控制的 Liquibase changelog。Studio 会针对数据模型和数据库结构之间的差异生成 changelog,并在启动应用程序时运行这些更改脚本。因此,当在测试或生产环境中启动一个新版本的应用时,会自动在连接的数据库上运行那些新添加的 changelog。 但是,这个简单的流程并不能满足所有的需求,有时候需要在没有 Studio 或应用程序的情况下运行 Liquibase,比如,在一个 CI 服务器上通过 Liquibase CLI 或 Gradle 插件运行 changelog。 在以前的版本中,这是不可能实现的,因为项目的 root changelog 文件没有定义扩展组件提供的数据库变更。但是 changelog 能正确运行是因为,Jmix 会从项目配置中获取使用的扩展组件信息,并在运行 Liquibase 之前在内存中动态创建正确的 changelog。 从 Jmix 1.5 开始,我们修改了这个机制,项目的 root changelog 文件始终是完整的,可以通过 Liquibase CLI 或 Gradle 插件执行。每当添加或删除扩展组件时,Studio 都会自动更新 changelog 包含新的内容。此外,当启动应用程序时,Studio 会检查 root changelog 中包含的内容与项目的扩展组件是否匹配。如果发现不匹配,Studio 会显示通知对话框,并建议添加或删除对扩展组件 changelog 的引入。 Jmix 工具窗口中,通过双击数据存储下的 Liquibase 节点即可打开 root changelog: ▲ Flow UI root changelog 下一步? 下一个 Jmix 的功能版本将在 2023 年 6 月发布,在这个版本中,我们将更新框架底层技术栈的版本,包括 Spring、Spring Boot、Eclipselink 以及 Vaadin。这次更新后,将会要求最低使用 Java 17 作为开发和运行 Jmix 程序的基线版本。 另一个重要的里程碑是为报表和 BPM 扩展组件实现 Flow UI 的界面模块。 未来版本的详细路线图请访问 GitHub 项目。1.5 的后续补丁版本会按照大约每个月一次的频率发布,提供常规更新和升级。 欢迎通过我们的 论坛 提供反馈和问题。谢谢大家对 Jmix 的支持和建议! 资源:👉🏻Jmix 适合我吗? 👉🏻 中文官网

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册