SpringBoot代码生成器,让你释放双手,从此不用手撸代码

/**

  • 表以及相关字段信息

*/

@Data

public class AppGen extends PageBean implements Serializable {

/**

  • 表名

*/

private String tableName;

/**

  • 实体类名

*/

private String entityName;

/**

  • 实体类名 首字母小写

*/

private String lowerEntityName;

/**

  • 表备注

*/

private String tableComment;

/**

  • 表前缀

*/

private String prefix;

/**

  • 功能描述

*/

private String function;

/**

  • 列名

*/

private String columnName;

/**

  • 实体列名

*/

private String entityColumnName;

/**

  • 列描述

*/

private String columnComment;

/**

  • 类型

*/

private String dataType;

/**

  • 自增

*/

private Object columnExtra;

/**

  • 长度

*/

private Object columnLength;

private List list;

}

获取表列表:

@Override

@Transactional(readOnly = true)

public Result list(AppGen gen){

String countSql = "SELECT COUNT(*) FROM information_schema.tables ";

countSql +=“WHERE table_schema=‘tools’”;

Long totalCount = dynamicQuery.nativeQueryCount(countSql);

PageBean data = new PageBean<>();

if(totalCount>0){

String nativeSql = "SELECT table_name as tableName,table_comment as tableComment ";

nativeSql+=“FROM information_schema.tables WHERE table_schema=‘tools’”;

Pageable pageable = PageRequest.of(gen.getPageNo(),gen.getPageSize());

List list = dynamicQuery.nativeQueryPagingListModel(AppGen.class,pageable, nativeSql);

data = new PageBean<>(list, totalCount);

}

return Result.ok(data);

}

SpringBoot代码生成器,让你释放双手,从此不用手撸代码

制作模板

模板太多了,这里只以Controller模板为例,贴一下实现代码,更多模板见源码:

package com.tools.module.${prefix}.web;

import com.tools.common.config.AbstractController;

import com.tools.common.model.Result;

import com.tools.module. p r e f i x . e n t i t y . {prefix}.entity. prefix.entity.{entityName};

import com.tools.module. p r e f i x . s e r v i c e . {prefix}.service. prefix.service.{entityName}Service;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping(“/ p r e f i x / {prefix}/ prefix/{function}”)

public class ${entityName}Controller extends AbstractController {

@Autowired

private ${entityName}Service ${function}Service;

/**

  • 列表

*/

@PostMapping(“/list”)

public Result list(${entityName} ${function}){

return f u n c t i o n S e r v i c e . l i s t ( {function}Service.list( functionService.list({function});

}

/**

  • 查询

*/

@PostMapping(“/get”)

public Result get(Long id){

return ${function}Service.get(id);

}

/**

  • 保存

*/

@PostMapping(“/save”)

public Result save(@RequestBody ${entityName} ${function}){

return f u n c t i o n S e r v i c e . s a v e ( {function}Service.save( functionService.save({function});

}

/**

  • 删除

*/

@PostMapping(“/delete”)

public Result delete(Long id){

return ${function}Service.delete(id);

}

}

说白了其实就是传递参数,把一些可变的代码片段使用${name}形式编写。

代码生成

有点长,慢慢看,其实就是渲染各种前后端模板:

/**

  • 生成代码

  • @param gen

  • @return

  • @throws IOException

  • @throws TemplateException

*/

@PostMapping(“/create”)

public Result create(@RequestBody AppGen gen) throws IOException, TemplateException {

/**

  • 获取表字段以及注释

*/

List list = genService.getByTable(gen);

String name = gen.getTableName();

String[] table = StringUtils.split(name,“_”);

gen.setPrefix(table[0]);

gen.setFunction(table[1]);

gen.setEntityName(GenUtils.allInitialCapital(gen.getTableName()));

list.stream().forEach(column-> {

column.setEntityColumnName(GenUtils.secInitialCapital(column.getColumnName()));

});

gen.setList(list);

String baseFile = filePath+ SystemConstant.SF_FILE_SEPARATOR+“com”+

SystemConstant.SF_FILE_SEPARATOR+ “tools”+

SystemConstant.SF_FILE_SEPARATOR+ “module”+

SystemConstant.SF_FILE_SEPARATOR+ gen.getPrefix()+SystemConstant.SF_FILE_SEPARATOR;

/**

  • 后端代码

*/

File entityFile = FileUtil.touch(baseFile+“entity”+

SystemConstant.SF_FILE_SEPARATOR+gen.getEntityName()+“.java”);

File repositoryFile = FileUtil.touch(baseFile+“repository”+

SystemConstant.SF_FILE_SEPARATOR+gen.getEntityName()+“Repository.java”);

File serviceFile = FileUtil.touch(baseFile+“service”+

SystemConstant.SF_FILE_SEPARATOR+gen.getEntityName()+“Service.java”);

File serviceImplFile = FileUtil.touch(baseFile+“service”+

SystemConstant.SF_FILE_SEPARATOR+“impl”+SystemConstant.SF_FILE_SEPARATOR+

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
链图片转存中…(img-ahxgpd8V-1713312467985)]

[外链图片转存中…(img-A43HRwMC-1713312467985)]

[外链图片转存中…(img-GEMBaKKY-1713312467985)]

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

[外链图片转存中…(img-bqiKat7A-1713312467986)]

[外链图片转存中…(img-QPsL256J-1713312467986)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值