Compare commits

..

No commits in common. "c478aa9418534b36fd827f7f4e333ea3150480d5" and "77745c42ed69a552dff3cf7f4f0724888c0bd6f4" have entirely different histories.

18 changed files with 88 additions and 162 deletions

2
.gitignore vendored
View File

@ -18,8 +18,6 @@ bunny-web.site.key
bunny-web.site_bundle.crt bunny-web.site_bundle.crt
bunny-web.site_bundle.pem bunny-web.site_bundle.pem
application-prod.yml
yarn.lock yarn.lock
npm-debug.log* npm-debug.log*
.pnpm-error.log* .pnpm-error.log*

View File

@ -30,6 +30,12 @@ public class GeneratorController {
private final GeneratorService generatorService; private final GeneratorService generatorService;
/**
* 生成代码
*
* @param dto 生成参数DTO
* @return 生成的代码结果按表名分组
*/
@Operation(summary = "生成代码", description = "根据SQL或数据库表生成代码") @Operation(summary = "生成代码", description = "根据SQL或数据库表生成代码")
@PostMapping @PostMapping
public Result<Map<String, List<GeneratorVo>>> generator(@Valid @RequestBody VmsArgumentDto dto) { public Result<Map<String, List<GeneratorVo>>> generator(@Valid @RequestBody VmsArgumentDto dto) {
@ -42,6 +48,12 @@ public class GeneratorController {
return Result.success(result); return Result.success(result);
} }
/**
* 打包代码为ZIP下载
*
* @param dto 生成参数DTO
* @return ZIP文件响应实体
*/
@Operation(summary = "打包下载", description = "将生成的代码打包为ZIP文件下载") @Operation(summary = "打包下载", description = "将生成的代码打包为ZIP文件下载")
@PostMapping("downloadByZip") @PostMapping("downloadByZip")
public ResponseEntity<byte[]> downloadByZip(@Valid @RequestBody VmsArgumentDto dto) { public ResponseEntity<byte[]> downloadByZip(@Valid @RequestBody VmsArgumentDto dto) {

View File

@ -30,16 +30,6 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
this.dto = dto; this.dto = dto;
this.path = path; this.path = path;
this.tableMetaData = tableMetaData; this.tableMetaData = tableMetaData;
// 处理表名称替换前缀
String tableName = tableMetaData.getTableName();
String[] prefixes = dto.getTablePrefixes().split("[,]");
for (String prefix : prefixes) {
if (tableName.startsWith(prefix)) {
String handlerTableName = tableName.replace(prefix, "");
tableMetaData.setCleanTableName(handlerTableName);
}
}
} }
/** /**
@ -50,7 +40,7 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
@Override @Override
public void addContext(VelocityContext context) { public void addContext(VelocityContext context) {
// 当前的表名 // 当前的表名
String handlerTableName = tableMetaData.getCleanTableName(); String tableName = tableMetaData.getTableName();
// 表的注释内容 // 表的注释内容
String comment = tableMetaData.getComment(); String comment = tableMetaData.getComment();
@ -71,11 +61,11 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
context.put("package", dto.getPackageName()); context.put("package", dto.getPackageName());
// 将类名称转成小驼峰 // 将类名称转成小驼峰
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(handlerTableName, false); String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false);
context.put("classLowercaseName", lowerCamelCase); context.put("classLowercaseName", lowerCamelCase);
// 将类名称转成大驼峰 // 将类名称转成大驼峰
String upperCameCase = MysqlTypeConvertUtil.convertToCamelCase(handlerTableName, true); String upperCameCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, true);
context.put("classUppercaseName", upperCameCase); context.put("classUppercaseName", upperCameCase);
} }

View File

@ -6,7 +6,6 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List; import java.util.List;
@Data @Data
@ -14,14 +13,11 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Schema(name = "TableMetaData", description = "表信息数据") @Schema(name = "TableMetaData", description = "表信息数据")
public class TableMetaData implements Serializable { public class TableMetaData {
@Schema(name = "tableName", description = "表名") @Schema(name = "tableName", description = "表名")
private String tableName; private String tableName;
@Schema(name = "handlerTableName", description = "处理后的表名称")
private String cleanTableName;
@Schema(name = "comment", description = "注释内容") @Schema(name = "comment", description = "注释内容")
private String comment; private String comment;
@ -37,5 +33,4 @@ public class TableMetaData implements Serializable {
@Schema(name = "columns", description = "列名称") @Schema(name = "columns", description = "列名称")
private List<ColumnMetaData> columns = List.of(); private List<ColumnMetaData> columns = List.of();
} }

View File

@ -1,5 +1,6 @@
package cn.bunny.service.helper; package cn.bunny.service.helper;
import cn.bunny.domain.dto.VmsArgumentDto;
import cn.bunny.utils.MysqlTypeConvertUtil; import cn.bunny.utils.MysqlTypeConvertUtil;
import com.google.common.base.CaseFormat; import com.google.common.base.CaseFormat;
@ -22,25 +23,36 @@ public class VmsGeneratorPathHelper {
/** /**
* 处理模板文件路径和命名 * 处理模板文件路径和命名
* *
* @param dto 生成参数
* @param path 原始模板路径 * @param path 原始模板路径
* @param tableName 数据库表名 * @param tableName 数据库表名
* @return 处理后的文件路径 * @return 处理后的文件路径
*/ */
public static String processVmPath(String path, String tableName) { public static String processVmPath(VmsArgumentDto dto, String path, String tableName) {
String className = removeTablePrefixes(dto, tableName);
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false); String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false);
String[] pathParts = path.replace("$className", lowerCamelCase).split("/");
if (lowerCamelCase != null) { // 处理文件名
String[] pathParts = path.replace("$className", lowerCamelCase).split("/"); pathParts[pathParts.length - 1] = processFilename(
// 处理文件名 pathParts[pathParts.length - 1],
pathParts[pathParts.length - 1] = processFilename( className
pathParts[pathParts.length - 1], );
lowerCamelCase
);
return String.join("/", pathParts); return String.join("/", pathParts);
}
/**
* 移除表前缀
*/
private static String removeTablePrefixes(VmsArgumentDto dto, String tableName) {
String[] prefixes = dto.getTablePrefixes().split("[,]");
for (String prefix : prefixes) {
if (tableName.startsWith(prefix)) {
return tableName.substring(prefix.length());
}
} }
return tableName;
return path;
} }
/** /**

View File

@ -56,12 +56,10 @@ public class GeneratorServiceImpl implements GeneratorService {
*/ */
@Override @Override
public Map<String, List<GeneratorVo>> generateCodeBySql(VmsArgumentDto dto) { public Map<String, List<GeneratorVo>> generateCodeBySql(VmsArgumentDto dto) {
// 根据Sql语句进行分析表的属性和表列字段
String sql = dto.getSql(); String sql = dto.getSql();
TableMetaData tableMeta = sqlMetadataProvider.getTableMetadata(sql); TableMetaData tableMeta = sqlMetadataProvider.getTableMetadata(sql);
List<ColumnMetaData> columns = sqlMetadataProvider.getColumnInfoList(sql); List<ColumnMetaData> columns = sqlMetadataProvider.getColumnInfoList(sql);
// 生成代码
List<GeneratorVo> generatorVoList = getGeneratorStream(dto, tableMeta, columns).toList(); List<GeneratorVo> generatorVoList = getGeneratorStream(dto, tableMeta, columns).toList();
Map<String, List<GeneratorVo>> map = new HashMap<>(); Map<String, List<GeneratorVo>> map = new HashMap<>();
@ -70,23 +68,11 @@ public class GeneratorServiceImpl implements GeneratorService {
return map; return map;
} }
/**
* 根据数据库进行生成
*
* @param dto 生成参数
* @return 生成的ZIP文件
*/
@Override @Override
public ResponseEntity<byte[]> downloadByZipByDatabase(VmsArgumentDto dto) { public ResponseEntity<byte[]> downloadByZipByDatabase(VmsArgumentDto dto) {
return downloadByZip(dto, this::generateCodeByDatabase); return downloadByZip(dto, this::generateCodeByDatabase);
} }
/**
* 根据Sql语句及逆行生成
*
* @param dto 生成参数
* @return 生成的ZIP文件
*/
@Override @Override
public ResponseEntity<byte[]> downloadByZipBySqL(VmsArgumentDto dto) { public ResponseEntity<byte[]> downloadByZipBySqL(VmsArgumentDto dto) {
return downloadByZip(dto, this::generateCodeBySql); return downloadByZip(dto, this::generateCodeBySql);
@ -131,22 +117,16 @@ public class GeneratorServiceImpl implements GeneratorService {
* @return 生成器流 * @return 生成器流
*/ */
public Stream<GeneratorVo> getGeneratorStream(VmsArgumentDto dto, TableMetaData tableMeta, List<ColumnMetaData> columns) { public Stream<GeneratorVo> getGeneratorStream(VmsArgumentDto dto, TableMetaData tableMeta, List<ColumnMetaData> columns) {
// 因为这里使用到了并行流 tableMeta 操作正常是会拿到修改后的值但是在并行流会有线程安全问题所以直接要手动实现深拷贝
return dto.getPath().parallelStream().map(path -> { return dto.getPath().parallelStream().map(path -> {
// 创建生成模板
VmsTBaseTemplateGenerator generator = new VmsTBaseTemplateGenerator(dto, path, tableMeta); VmsTBaseTemplateGenerator generator = new VmsTBaseTemplateGenerator(dto, path, tableMeta);
// 生成好的模板
String code = generator.generateCode(tableMeta, columns).toString(); String code = generator.generateCode(tableMeta, columns).toString();
String processVmPath = VmsGeneratorPathHelper.processVmPath(path, tableMeta.getCleanTableName());
return GeneratorVo.builder() return GeneratorVo.builder()
.id(UUID.randomUUID().toString()) .id(UUID.randomUUID().toString())
.code(code) .code(code)
.comment(tableMeta.getComment()) .comment(tableMeta.getComment())
.tableName(tableMeta.getTableName()) .tableName(tableMeta.getTableName())
.path(processVmPath) .path(VmsGeneratorPathHelper.processVmPath(dto, path, tableMeta.getTableName()))
.build(); .build();
}); });
} }

View File

@ -95,8 +95,6 @@ const AppGeneratorPage = defineComponent({
* 几秒后恢复原状 * 几秒后恢复原状
*/ */
async onCopyToClipboard(code) { async onCopyToClipboard(code) {
this.copied = true;
try { try {
await navigator.clipboard.writeText(code); await navigator.clipboard.writeText(code);
antd.notification.open({ antd.notification.open({
@ -121,13 +119,6 @@ const AppGeneratorPage = defineComponent({
document.execCommand('copy'); document.execCommand('copy');
document.body.removeChild(textarea); document.body.removeChild(textarea);
} }
// 显示已复制图标时长
if (this.copied) {
setTimeout(() => {
this.copied = false;
}, 2000)
}
}, },
/* 下载全部文件 */ /* 下载全部文件 */

View File

@ -34,8 +34,6 @@ axiosInstance.interceptors.response.use(
} else { } else {
antd.message.error(message || '系统出错'); antd.message.error(message || '系统出错');
} }
return error.response.data;
} }
return Promise.reject(error.message); return Promise.reject(error.message);
} }

View File

@ -288,12 +288,11 @@ const DatabaseForm = {
async onDownloadZip() { async onDownloadZip() {
this.downloadLoading = true; this.downloadLoading = true;
try { try {
// 重要指定响应类型为blob
const response = await axiosInstance({ const response = await axiosInstance({
url: "/generator/downloadByZip", url: "/generator/downloadByZip",
method: "POST", method: "POST",
data: this.form, data: this.form,
responseType: 'blob' responseType: 'blob' // 重要指定响应类型为blob
}); });
// 从响应头中获取文件名 // 从响应头中获取文件名

View File

@ -169,32 +169,21 @@
}, },
watch: { watch: {
/* 数据表选择 */ /* 数据表选择 */
dbSelect: "getDatabaseTableList", dbSelect: {
handler() {
/* 过滤数据表 */ this.getDatabaseTableList();
tableSelect(val) { }
this.tableList = this.rawTableList;
// 根据表名进行过滤筛选或者根据注释内容进行筛选
this.tableList = this.tableList.filter(table => table.tableName.includes(val) || table.comment.includes(val));
}, },
/** /* 过滤数据表 */
* 监听form表单放到 localStorage tableSelect: {
* 不要使用 immediate 否则初始话加载的时候会将 localStorage 改成 原始表单
*/
form: {
deep: true,
handler(val) { handler(val) {
localStorage.setItem("form", JSON.stringify(val)); this.tableList = this.rawTableList;
}, // 根据表名进行过滤筛选或者根据注释内容进行筛选
} this.tableList = this.tableList.filter(table => table.tableName.includes(val) || table.comment.includes(val));
}
},
}, },
mounted() {
const form = localStorage.getItem("form");
if (form !== null) {
this.form = JSON.parse(form);
}
}
}); });
// 注册组件 // 注册组件

View File

@ -1,17 +1,15 @@
package ${package}.controller; package ${package}.controller;
import ${package}.domain.dto.${classUppercaseName}Dto; import cn.bunny.domain.pojo.result.Result;
import ${package}.domain.entity.${classUppercaseName}; import cn.bunny.domain.pojo.result.ResultCodeEnum;
import ${package}.domain.vo.${classUppercaseName}Vo;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
import cn.bunny.domain.pojo.result.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import ${package}.service.${classUppercaseName}Service;
import java.util.List; import java.util.List;
@ -23,42 +21,42 @@ import java.util.List;
* @author ${author} * @author ${author}
* @since ${date} * @since ${date}
*/ */
@Tag(name = "${comment}", description = "${comment}相关接口") @Tag(name = "${comment}" , description = "${comment}相关接口" )
@RestController @RestController
@RequestMapping("${requestMapping}/${classLowercaseName}") @RequestMapping("${requestMapping}/${classLowercaseName}" )
@RequiredArgsConstructor
public class ${classUppercaseName}Controller { public class ${classUppercaseName}Controller {
private final ${classUppercaseName}Service ${classLowercaseName}Service; @Resource
private ${classUppercaseName}Service ${classLowercaseName}Service;
@Operation(summary = "分页查询${comment}", description = "分页${comment}") @Operation(summary = "分页查询${comment}" , description = "分页${comment}" )
@GetMapping("{page}/{limit}") @GetMapping("{page}/{limit}" )
public Result<PageResult<${classUppercaseName}Vo>> get${classUppercaseName}Page( public Result<PageResult<${classUppercaseName}Vo>> get${classUppercaseName}Page(
@Parameter(name = "page", description = "当前页", required = true) @Parameter(name = "page" , description = "当前页" , required = true)
@PathVariable("page") Integer page, @PathVariable("page" ) Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true) @Parameter(name = "limit" , description = "每页记录数" , required = true)
@PathVariable("limit") Integer limit, @PathVariable("limit" ) Integer limit,
${classUppercaseName}Dto dto) { ${classUppercaseName}Dto dto) {
Page<${classUppercaseName}> pageParams = new Page<>(page, limit); Page<${classUppercaseName}> pageParams = new Page<>(page, limit);
PageResult<${classUppercaseName}Vo> pageResult = ${classLowercaseName}Service.get${classUppercaseName}Page(pageParams, dto); PageResult<${classUppercaseName}Vo> pageResult = ${classLowercaseName}Service.get${classUppercaseName}Page(pageParams, dto);
return Result.success(pageResult); return Result.success(pageResult);
} }
@Operation(summary = "添加${comment}", description = "添加${comment}") @Operation(summary = "添加${comment}" , description = "添加${comment}" )
@PostMapping() @PostMapping()
public Result<String> add${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) { public Result<String> add${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}to dto) {
${classLowercaseName}Service.add${classUppercaseName}(dto); ${classLowercaseName}Service.add${classUppercaseName}(dto);
return Result.success(ResultCodeEnum.ADD_SUCCESS); return Result.success(ResultCodeEnum.ADD_SUCCESS);
} }
@Operation(summary = "更新${comment}", description = "更新${comment}") @Operation(summary = "更新${comment}" , description = "更新${comment}" )
@PutMapping() @PutMapping()
public Result<String> update${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) { public Result<String> update${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) {
${classLowercaseName}Service.update${classUppercaseName}(dto); ${classLowercaseName}Service.update${classUppercaseName}(dto);
return Result.success(ResultCodeEnum.UPDATE_SUCCESS); return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
} }
@Operation(summary = "删除${comment}", description = "删除${comment}") @Operation(summary = "删除${comment}" , description = "删除${comment}" )
@DeleteMapping() @DeleteMapping()
public Result<String> delete${classUppercaseName}(@RequestBody List<Long> ids) { public Result<String> delete${classUppercaseName}(@RequestBody List<Long> ids) {
${classLowercaseName}Service.delete${classUppercaseName}(ids); ${classLowercaseName}Service.delete${classUppercaseName}(ids);

View File

@ -1,11 +1,3 @@
package ${package}.domain.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor

View File

@ -1,12 +1,3 @@
package ${package}.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Getter @Getter
@Setter @Setter

View File

@ -1,21 +1,13 @@
package ${package}.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Schema(name = "${classUppercaseName}VO对象", title = "${comment}", description = "${comment}的VO对象") @Schema(name = "${classUppercaseName}VO对象", title = "${comment}", description = "${comment}的VO对象")
public class ${classUppercaseName}Vo { public class ${classUppercaseName}Vo {
#foreach($field in ${columnInfoList}) #foreach($field in ${columnInfoList})
@Schema(name = "${field.lowercaseName}", title = "${field.comment}") @Schema(name = "${field.lowercaseName}", title = "${field.comment}")
private ${field.javaType} ${field.lowercaseName}; private ${field.javaType} ${field.lowercaseName};
#end #end
} }

View File

@ -4,11 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import ${package}.domain.dto.${classUppercaseName}Dto;
import ${package}.domain.entity.${classUppercaseName};
import ${package}.domain.vo.${classUppercaseName}Vo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -30,6 +25,6 @@ public interface ${classUppercaseName}Mapper extends BaseMapper<${classUppercase
* @param dto ${comment}查询表单 * @param dto ${comment}查询表单
* @return ${comment}分页结果 * @return ${comment}分页结果
*/ */
IPage<${classUppercaseName}Vo> selectListByPage(@Param("page") Page<${classUppercaseName}> pageParams, @Param("dto") ${classUppercaseName}Dto dto); IPage<${classUppercaseName}Vo> selectListByPage(@Param("page" ) Page<${classUppercaseName}> pageParams, @Param("dto" ) ${classUppercaseName}Dto dto);
} }

View File

@ -3,7 +3,7 @@
<mapper namespace="${package}.mapper.${classUppercaseName}Mapper"> <mapper namespace="${package}.mapper.${classUppercaseName}Mapper">
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package}.domain.entity.${classUppercaseName}"> <resultMap id="BaseResultMap" type="${classUppercaseName}">
#foreach($field in ${columnInfoList}) #foreach($field in ${columnInfoList})
<id column="${field.columnName}" property="${field.lowercaseName}"/> <id column="${field.columnName}" property="${field.lowercaseName}"/>
#end #end
@ -15,7 +15,7 @@
</sql> </sql>
<!-- 分页查询${comment}内容 --> <!-- 分页查询${comment}内容 -->
<select id="selectListByPage" resultType="${package}.domain.vo.${classUppercaseName}Vo"> <select id="selectListByPage" resultType="${voClassType}">
select select
base.*, base.*,
create_user.username as create_username, create_user.username as create_username,

View File

@ -1,5 +1,6 @@
package ${package}.service.impl; package ${package}.service.impl;
import cn.bunny.domain.pojo.result.PageResult;
import ${package}.mapper.${classUppercaseName}Mapper; import ${package}.mapper.${classUppercaseName}Mapper;
import ${package}.service.${classUppercaseName}Service; import ${package}.service.${classUppercaseName}Service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -7,11 +8,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ${package}.service.${classUppercaseName}Service;
import ${package}.domain.dto.${classUppercaseName}Dto;
import ${package}.domain.entity.${classUppercaseName};
import ${package}.domain.vo.${classUppercaseName}Vo;
import java.util.List; import java.util.List;
@ -24,7 +20,6 @@ import java.util.List;
* @since ${date} * @since ${date}
*/ */
@Service @Service
@Transactional
public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUppercaseName}Mapper, ${classUppercaseName}> implements ${classUppercaseName}Service { public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUppercaseName}Mapper, ${classUppercaseName}> implements ${classUppercaseName}Service {
/** /**
@ -52,7 +47,7 @@ public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUpperca
* @param dto ${comment}添加 * @param dto ${comment}添加
*/ */
@Override @Override
public void add${classUppercaseName}(${classUppercaseName}Dto dto) { public void add${classUppercaseName}(@Valid ${classUppercaseName}AddDto dto) {
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}(); ${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
BeanUtils.copyProperties(dto, ${classLowercaseName}); BeanUtils.copyProperties(dto, ${classLowercaseName});
save(${classLowercaseName}); save(${classLowercaseName});
@ -64,7 +59,7 @@ public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUpperca
* @param dto ${comment}更新 * @param dto ${comment}更新
*/ */
@Override @Override
public void update${classUppercaseName}(${classUppercaseName}Dto dto) { public void update${classUppercaseName}(@Valid ${classUppercaseName}UpdateDto dto) {
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}(); ${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
BeanUtils.copyProperties(dto, ${classLowercaseName}); BeanUtils.copyProperties(dto, ${classLowercaseName});
updateById(${classLowercaseName}); updateById(${classLowercaseName});

View File

@ -1,11 +1,10 @@
package ${package}.service; package ${package}.service;
import cn.bunny.domain.entity.system.MenuIcon;
import cn.bunny.domain.pojo.result.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import ${package}.domain.dto.${classUppercaseName}Dto; import jakarta.validation.Valid;
import ${package}.domain.entity.${classUppercaseName};
import ${package}.domain.vo.${classUppercaseName}Vo;
import java.util.List; import java.util.List;
@ -29,16 +28,16 @@ public interface ${classUppercaseName}Service extends IService<${classUppercaseN
/** /**
* 添加${comment} * 添加${comment}
* *
* @param dto {@link ${classUppercaseName}Dto} 添加表单 * @param dto 添加表单
*/ */
void add${classUppercaseName}(${classUppercaseName}Dto dto); void add${classUppercaseName}(${classUppercaseName}AddDto dto);
/** /**
* 更新${comment} * 更新${comment}
* *
* @param dto {@link ${classUppercaseName}Dto} 更新表单 * @param dto {@link ${classUppercaseName}UpdateDto}
*/ */
void update${classUppercaseName}(${classUppercaseName}Dto dto); void update${classUppercaseName}(${classUppercaseName}UpdateDto dto);
/** /**
* 删除|批量删除${comment}类型 * 删除|批量删除${comment}类型