代碼生成器
源碼分析

查詢數據庫列表
導入表結構
生成代碼

修改generator.yml配置文件
代碼生成器增強
Velocity模版引擎
基礎語法-變量

Lombok集成
E:\javaProject\dkd-parent\dkd-generator\src\main\resources\vm\java\domain.java.vm
package ${packageName}.domain;#foreach ($import in $importList)
import ${import};
#end
import com.dkd.common.annotation.Excel;
#if($table.crud || $table.sub)
import com.dkd.common.core.domain.BaseEntity;
#elseif($table.tree)
import com.dkd.common.core.domain.TreeEntity;
#end
## 導入lombok相關注解
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;/*** ${functionName}對象 ${tableName}** @author ${author}* @date ${datetime}*/
#if($table.crud || $table.sub)
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
#end
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ${ClassName} extends ${Entity}
{private static final long serialVersionUID = 1L;#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))/** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf("("))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if($parentheseIndex != -1)@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
#elseif($column.javaType == 'Date')@JsonFormat(pattern = "yyyy-MM-dd")@Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
#else@Excel(name = "${comment}")
#end
#endprivate $column.javaType $column.javaField;#end
#end
#if($table.sub)/** $table.subTable.functionName信息 */private List<${subClassName}> ${subclassName}List;#end
}
Swagger集成
package ${packageName}.controller;import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dkd.common.core.domain.R;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dkd.common.annotation.Log;
import com.dkd.common.core.controller.BaseController;
import com.dkd.common.core.domain.AjaxResult;
import com.dkd.common.enums.BusinessType;
import ${packageName}.domain.${ClassName};
import ${packageName}.service.I${ClassName}Service;
import com.dkd.common.utils.poi.ExcelUtil;
#if($table.crud || $table.sub)
import com.dkd.common.core.page.TableDataInfo;
#elseif($table.tree)
#end/*** ${functionName}Controller* * @author ${author}* @date ${datetime}*/
@Api(tags = "${functionName}Controller")
@RestController
@RequestMapping("/${moduleName}/${businessName}")
public class ${ClassName}Controller extends BaseController
{@Autowiredprivate I${ClassName}Service ${className}Service;/*** 查詢${functionName}列表*/@ApiOperation(value = "查詢${functionName}列表")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")@GetMapping("/list")
#if($table.crud || $table.sub)public TableDataInfo list(${ClassName} ${className}){startPage();List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});return getDataTable(list);}
#elseif($table.tree)public AjaxResult list(${ClassName} ${className}){List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});return R.ok(list);}
#end/*** 導出${functionName}列表*/@ApiOperation(value = "導出${functionName}列表")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')")@Log(title = "${functionName}", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, ${ClassName} ${className}){List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);util.exportExcel(response, list, "${functionName}數據");}/*** 獲取${functionName}詳細信息*/@ApiOperation(value = "獲取${functionName}詳細信息")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')")@GetMapping(value = "/{${pkColumn.javaField}}")public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}){return R.ok(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));}/*** 新增${functionName}*/@ApiOperation(value = "新增${functionName}")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')")@Log(title = "${functionName}", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody ${ClassName} ${className}){return toAjax(${className}Service.insert${ClassName}(${className}));}/*** 修改${functionName}*/@ApiOperation(value = "修改${functionName}")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')")@Log(title = "${functionName}", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody ${ClassName} ${className}){return toAjax(${className}Service.update${ClassName}(${className}));}/*** 刪除${functionName}*/@ApiOperation(value = "刪除${functionName}")@PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')")@Log(title = "${functionName}", businessType = BusinessType.DELETE)@DeleteMapping("/{${pkColumn.javaField}s}")public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s){return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s));}
}
RBAC權限控制
Spring Security:是一個功能強大的ava安全框架,它提供了全面的安全認證和授權的支持
與RBAC模型結合使用時,Spring Security能夠實現靈活權限控制
用戶登錄流程
獲取用戶角色權限
動態菜單路由
權限注解

異步任務管理器

操作日志
定時任務

集群模式



數據權限
業務改造

