LICENSE
ÎļþÒÑɾ³ý README.md
ÎļþÒÑɾ³ý basic-server/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>ruoyi</artifactId> <groupId>com.ruoyi</groupId> <version>3.8.9</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>basic-server</artifactId> <dependencies> <!-- éç¨å·¥å ·--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common</artifactId> </dependency> <!-- æ ¸å¿æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-framework</artifactId> </dependency> <!-- ç³»ç»æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-system</artifactId> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project> bin/clean.bat
ÎļþÒÑɾ³ý bin/package.bat
ÎļþÒÑɾ³ý bin/run.bat
ÎļþÒÑɾ³ý pom.xml
@@ -35,6 +35,8 @@ <jakarta.version>6.0.0</jakarta.version> <springdoc.version>2.6.0</springdoc.version> <postgresql.version>42.7.3</postgresql.version> <mybatis-plus.version>3.5.12</mybatis-plus.version> <freemarker.version>2.3.30</freemarker.version> </properties> <!-- ä¾èµå£°æ --> @@ -70,13 +72,7 @@ <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper.boot.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> @@ -158,13 +154,6 @@ <version>${ruoyi.version}</version> </dependency> <!-- 代ç çæ--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-generator</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- æ ¸å¿æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> @@ -192,16 +181,59 @@ <version>${postgresql.version}</version> </dependency> <!--åºç¡æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>basic-server</artifactId> <version>${ruoyi.version}</version> </dependency> </dependencies> </dependencyManagement> <!-- å ¨å±å¼å ¥ --> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <!-- MyBatis-Plus æ ¸å¿ä¾èµ --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>3.5.12</version> <!-- ä¸ä½ ç Spring Boot å ¼å®¹ççæ¬ --> </dependency> <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!--mybatis-plus代ç çæå¨--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> </dependencies> <modules> <module>ruoyi-admin</module> <module>ruoyi-framework</module> <module>ruoyi-system</module> <module>ruoyi-quartz</module> <module>ruoyi-generator</module> <module>ruoyi-common</module> <module>basic-server</module> </modules> <packaging>pom</packaging> project.md
@@ -44,7 +44,7 @@ ``` è¯·å¨æ¯ä¸ä¸ªæ¨¡åçsrc/main/resources/db/migration/postgresqlä¸å建sqlæä»¶ï¼æ²¡æè¯·æå¨æ°å¢ç®å½ è¿ç§»æä»¶å½åè§åV2023072000000__create_table_note_template.sql è¿ç§»æä»¶å½åè§åV2023072000000__create_table_note_template.sql æ°åä¸ºå¹´ææ¥æ¶åç§ï¼éæ¶é´æ³ å¼åæ¶æå¯ä¿®æ¹åå²sqlèæ¬ï¼æäº§è¯·ä½¿ç¨æ°å¢sqlæä»¶ä¿®æ¹æ°æ®åºï¼ç¦æ¢ç´æ¥ä¿®æ¹æ°æ®åº ruoyi-admin/pom.xml
@@ -74,18 +74,24 @@ <artifactId>ruoyi-quartz</artifactId> </dependency> <!-- 代ç çæ--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-generator</artifactId> </dependency> <!-- postgresql驱å¨å --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <!-- FreeMarker 模æ¿å¼æ --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> <!-- 坿 ¹æ®éè¦è°æ´çæ¬ --> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> </dependencies> ruoyi-admin/src/main/java/com/ruoyi/PlusCodeGenerator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,162 @@ package com.ruoyi; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.baomidou.mybatisplus.generator.fill.Column; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * MyBatis-Plus 代ç çæå¨ * åè½ï¼æ ¹æ®æ°æ®åºè¡¨ç»æèªå¨çæEntityãMapperãServiceãControllerç代ç * ä¿®å¤ï¼è§£å³Freemarker模æ¿ä¸generateServiceåé缺失çé®é¢ */ @SpringBootApplication public class PlusCodeGenerator { // æ°æ®åºé ç½® private static final String DB_URL = "jdbc:postgresql://lunor.cn:5431/ruoyi-java"; private static final String DB_USERNAME = "test"; private static final String DB_PASSWORD = "chj123456"; // 项ç®åºç¡é ç½® private static final String BASE_PACKAGE = "com.ruoyi"; private static final String MODULE_NAME = "basic"; // 模åå public static void main(String[] args) { String projectPath = System.getProperty("user.dir"); // è·åé¡¹ç®æ ¹è·¯å¾ String path = "basic-server"; // 模ååç§° String table = "test"; // 表åï¼å¤ä¸ªè¡¨éå·éå¼ // 代ç è¾åºè·¯å¾é ç½® String outputBasePath = Paths.get(projectPath, path, "src", "main", "java").toString(); String outputResourcePath = Paths.get(projectPath, path, "src", "main", "resources", "mapper").toString(); // 代ç çææ ¸å¿é ç½® FastAutoGenerator.create(DB_URL, DB_USERNAME, DB_PASSWORD) .globalConfig(builder -> { builder.author("ruoyi") // ä½è ä¿¡æ¯ .outputDir(outputBasePath) // 代ç è¾åºç®å½ .dateType(DateType.ONLY_DATE) // æ¥æç±»å .commentDate("yyyy-MM-dd") // æ³¨éæ¥ææ ¼å¼ .disableOpenDir(); // ç¦æ¢èªå¨æå¼è¾åºç®å½ }) .packageConfig(builder -> { builder.parent(BASE_PACKAGE) // åºç¡å å .moduleName(MODULE_NAME) // 模åå .entity("entity") // Entityå å .mapper("mapper") // Mapperå å .service("service") // Serviceå å .serviceImpl("service.impl") // Serviceå®ç°ç±»å å .controller("controller") // Controllerå å .pathInfo(Collections.singletonMap( OutputFile.xml, outputResourcePath // Mapper XMLè¾åºè·¯å¾ )); }) .strategyConfig(builder -> { builder.addInclude(table) // è¦çæç表å .addTablePrefix("t_", "sys_") // è¿æ»¤è¡¨åç¼ // å®ä½ç±»é ç½® .entityBuilder() .superClass("com.ruoyi.common.core.domain.BaseEntity") // ç»§æ¿åºç±» .addSuperEntityColumns("create_by", "create_time", "update_by", "update_time") // æé¤åºç±»å段 .enableLombok() // å¯ç¨Lombok .naming(NamingStrategy.underline_to_camel) // 表å转驼峰 .columnNaming(NamingStrategy.underline_to_camel) // åå转驼峰 .enableFileOverride() // å 许è¦çæä»¶ .logicDeleteColumnName("deleted") // é»è¾å é¤å段 .addTableFills( // èªå¨å¡«å é ç½® new Column("create_by", FieldFill.INSERT), // åå»ºäººï¼æå ¥æ¶å¡«å new Column("update_by", FieldFill.INSERT_UPDATE), // æ´æ°äººï¼æå ¥åæ´æ°æ¶å¡«å new Column("create_time", FieldFill.INSERT), // å建æ¶é´ï¼æå ¥æ¶å¡«å new Column("update_time", FieldFill.INSERT_UPDATE) // æ´æ°æ¶é´ï¼æå ¥åæ´æ°æ¶å¡«å ) .idType(IdType.AUTO) // 主é®çç¥ .enableTableFieldAnnotation() // å¯ç¨å段注解 // æ§å¶å¨é ç½® .controllerBuilder() .enableFileOverride() // å 许è¦ç .enableRestStyle() // çæRESTful飿 ¼æ§å¶å¨ // Serviceé ç½® .serviceBuilder() .formatServiceFileName("%sService") // Serviceæ¥å£å½åæ ¼å¼ .enableFileOverride() // å 许è¦ç .formatServiceImplFileName("%sServiceImpl") // Serviceå®ç°ç±»å½åæ ¼å¼ .enableFileOverride() // å 许è¦ç // Mapperé ç½® .mapperBuilder() .enableFileOverride() // å 许è¦ç .enableMapperAnnotation() // å¯ç¨@Mapper注解 .enableBaseResultMap() // å¯ç¨åºç¡ResultMap .enableBaseColumnList() // å¯ç¨åºç¡ColumnList .formatMapperFileName("%sMapper") // Mapperæ¥å£å½åæ ¼å¼ .formatXmlFileName("%sMapper") // Mapper XMLå½åæ ¼å¼ .enableFileOverride(); // å 许è¦ç }) // é ç½®èªå®ä¹æ¨¡æ¿ .templateConfig(builder -> { builder .entity("/templates/entity.java") // å®ä½ç±»æ¨¡æ¿ .xml("/templates/mapper.xml") // Mapper XMLæ¨¡æ¿ .controller("/templates/controller.java") // æ§å¶å¨æ¨¡æ¿ .serviceImpl("/templates/serviceImpl.java"); // Serviceå®ç°ç±»æ¨¡æ¿ }) // æ³¨å ¥æ¨¡æ¿åé .injectionConfig(builder -> { Map<String, Object> customMap = new HashMap<>(); customMap.put("superEntityColumns", Arrays.asList( "create_by", "create_time", "update_by", "update_time" )); // åºç±»å段 customMap.put("idType", "AUTO"); // 主é®ç±»å customMap.put("superEntityClass", "com.ruoyi.common.core.domain.BaseEntity"); // åºç±»å ¨è·¯å¾ customMap.put("author", "ruoyi"); // ä½è ä¿¡æ¯ customMap.put("packageName", BASE_PACKAGE + "." + MODULE_NAME); // å å customMap.put("tableName", table); // 表å // æ°å¢ï¼è§£å³Freemarker模æ¿ä¸generateServiceåé缺失çé®é¢ // æ§å¶Serviceå®ç°ç±»æ¯å¦å®ç°Serviceæ¥å£ boolean generateService = true; customMap.put("generateService", generateService); builder.customMap(customMap); }) .templateEngine(new FreemarkerTemplateEngine()) // 使ç¨Freemarker模æ¿å¼æ .execute(); // æ§è¡ä»£ç çæ // åå¤çï¼ä¿®å¤å®ä½ç±»çå®å ¨éå®åé®é¢ try { Path entityPath = Paths.get(outputBasePath, "com/ruoyi/basic/entity/Test.java"); if (Files.exists(entityPath)) { String content = Files.readString(entityPath); content = content.replace( "extends com.ruoyi.common.core.domain.BaseEntity", "extends BaseEntity" ); // ç®ååºç±»å¼ç¨ Files.writeString(entityPath, content); } } catch (IOException e) { System.err.println("â ï¸ ä¿®å¤å®ä½ç±»å¤±è´¥: " + e.getMessage()); } System.out.println("â 代ç çæå®æï¼æä»¶å·²è¾åºå°ï¼" + outputBasePath); } } ruoyi-admin/src/main/resources/templates/controller.Java.ftl
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package ${package.Controller}; import org.springframework.web.bind.annotation.RequestMapping; import lombok.AllArgsConstructor; <#if restControllerStyle> import org.springframework.web.bind.annotation.RestController; <#else> import org.springframework.stereotype.Controller; </#if> <#if superControllerClassPackage??> import ${superControllerClassPackage}; </#if> /** * <p> * ${table.comment!} å端æ§å¶å¨ * </p> * * @author ${author} * @since ${date} */ <#if restControllerStyle> @RestController <#else> @Controller </#if> @AllArgsConstructor @RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle>${controllerMappingHyphen}<#else>${table.entityPath}</#if>") <#if kotlin> class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if> <#else> <#if superControllerClass??> public class ${table.controllerName} extends ${superControllerClass} { <#else> public class ${table.controllerName} { </#if> } </#if> ruoyi-admin/src/main/resources/templates/entity.java.ftl
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package ${package.Entity}; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; <#if superEntityClass?? && superEntityClass != ""> import ${superEntityClass}; </#if> <#list table.fields as field> <#if field.propertyType == "LocalDateTime"> import java.time.LocalDateTime; <#break> </#if> </#list> /** * ${table.comment!} å®ä½ç±» * * @author ${author!"admin"} * @date ${.now?string("yyyy-MM-dd")} */ @Data @TableName("${table.name}") public class ${entity} <#if superEntityClass?? && superEntityClass != "">extends ${superEntityClass?substring(superEntityClass?last_index_of(".") + 1)}</#if> { private static final long serialVersionUID = 1L; <#list table.fields as field> <#-- ä¿®å¤ï¼æ·»å superEntityColumns å卿§æ£æ¥ --> <#if superEntityColumns?? && !superEntityColumns?seq_contains(field.name)> /** * ${field.comment!} */ <#if field.keyFlag> @TableId(value = "${field.name}", type = IdType.${idType!"AUTO"}) <#else> @TableField(value = "${field.name}"<#if field.fill?? && field.fill != "">, fill = FieldFill.${field.fill?upper_case}</#if>) </#if> <#if field.logicDeleteField> @TableLogic </#if> private ${field.propertyType} ${field.propertyName}; </#if> </#list> } ruoyi-admin/src/main/resources/templates/mapper.xml.ftl
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="${package.Mapper}.${table.mapperName}"> <#if enableCache> <!-- å¼å¯äºçº§ç¼å --> <cache type="${cacheClassName}"/> </#if> <#if baseResultMap> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="${package.Entity}.${entity}"> <#list table.fields as field> <#if field.keyFlag><#--çæä¸»é®æå¨ç¬¬ä¸ä½--> <id column="${field.name}" property="${field.propertyName}" /> </#if> </#list> <#list table.commonFields as field><#--çæå ¬å ±å段 --> <result column="${field.name}" property="${field.propertyName}" /> </#list> <#list table.fields as field> <#if !field.keyFlag><#--çææ®éåæ®µ --> <result column="${field.name}" property="${field.propertyName}" /> </#if> </#list> </resultMap> </#if> <#if baseColumnList> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> <#list table.commonFields as field> ${field.columnName}, </#list> ${table.fieldNames} </sql> </#if> </mapper> ruoyi-admin/src/main/resources/templates/serviceImpl.java.ftl
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package ${package.ServiceImpl}; import ${package.Entity}.${entity}; import ${package.Mapper}.${table.mapperName}; <#if generateService> import ${package.Service}.${table.serviceName}; </#if> import ${superServiceImplClassPackage}; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; /** * <p> * ${table.comment!} æå¡å®ç°ç±» * </p> * * @author ${author} * @since ${date} */ @Service @RequiredArgsConstructor <#if kotlin> open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>()<#if generateService>, ${table.serviceName}</#if> { } <#else> public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}><#if generateService> implements ${table.serviceName}</#if> { } </#if> ruoyi-common/pom.xml
@@ -128,13 +128,7 @@ <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.10</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-jsqlparser</artifactId> <version>3.5.10</version> <version>3.5.12</version> </dependency> </dependencies> ruoyi-framework/pom.xml
@@ -53,6 +53,18 @@ <artifactId>oshi-core</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.12</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.5.6</version> </dependency> <!-- ç³»ç»æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> ruoyi-generator/pom.xml
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/PlusCodeGenerator.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/generator.yml.example
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/controller.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/domain.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/service.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/js/api.js.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/sql/sql.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
ÎļþÒÑɾ³ý