# wtf-generator **Repository Path**: hhzx123/wtf-generator ## Basic Information - **Project Name**: wtf-generator - **Description**: 午托饭-代码生成器 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/linaiyi/wtf-generator - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-07-13 - **Last Updated**: 2023-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wtf-generator ### 项目介绍 午托饭代码生成器,可以通过界面 **动态管理数据源** 、 **模板配置** 、 **生成器** 等功能,实现代码快速生成。 目前支持:MYSQL,POSTGRE_SQL数据库表的JAVA项目代码生成,后期将加入ORACLE数据库 ### 本地演示 演示地址:http://localhost:8003/wtf/ ### 功能列表 - ✔ 数据源:配置连接和测试数据源 - ✔ 模板配置:配置数据源的代码模板,包括:模板名称、代码包路径、模块名、类注释的作者和邮箱、表前缀 - ✔ 生成器:生成数据源下选择的表,可以选择代码模板生成最终代码,如没有配置数据源的代码模板则使用默认模板生成最终代码 - ... ### 软件架构 #### 后端架构 ##### 开发环境 - IDE : IDEA - JDK : JDK1.8.x - Maven : Maven 3.x.x - MySQL: MySQL 5.7.x ##### 技术选型 - 核心框架:Spring Boot 2.x - 视图框架:Spring MVC 5.x - 持久层框架:MyBatis Plus 3.x ##### 技术亮点 - 基于mybatis plus的多数据源,实现了可以动态管理数据源的增、删、改、查 - 支持数据源的持久化,重启项目时,可以重新加载数据源 - 支持模板配置的持久化,重启项目时,可以重新加载数据源的配置 - 支持数据源、模板配置的持久化扩展,比如使用Nacos Config持久化 #### 前端架构 ##### 开发环境 ##### 技术选型 - 前端框架:Vue 2.x - 页面组件:Element 2.x ##### 项目结构 ### 源码安装教程 #### 项目安装 1. 下载源码 git clone https://gitee.com/linaiyi/wtf-generator.git 2. 导入工程 使用 IDEA导入 Maven 项目,在此之前请确认已安装 JDK 和 Maven 工具。 3. 编译代码 找到 wtf-generator 工程的 pom.xml,执行 maven clean install 命令编译一键打包。 。 4. 导入数据库 wtf-generator目录下的sql目录中,当前主数据源选择msqyl,目前仅支持mysql下执行wtf.sql,如果主数据源选择其他数据库,可以根据wtf.sql中表和字段适当调整为其他数据库表即可 5. 启动系统 找到 wtf-generator工程下的 WtfGeneratorApplication, 启动项目,开启代码生成服务。 ### 使用指南 #### 1.数据源列表 ![输入图片说明](sql/%E6%95%B0%E6%8D%AE%E6%BA%90%E5%88%97%E8%A1%A8.png) #### 2.数据库连接测试和创建数据源 ![输入图片说明](sql/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B5%8B%E8%AF%95.png) #### 3.模板列表 ![输入图片说明](sql/%E6%A8%A1%E6%9D%BF%E9%85%8D%E7%BD%AE%E5%88%97%E8%A1%A8.png) #### 4.创建模板 ![输入图片说明](sql/%E6%A8%A1%E6%9D%BF%E9%85%8D%E7%BD%AE%E5%88%9B%E5%BB%BA.png) #### 5.选择数据源的表 ![输入图片说明](sql/%E6%95%B0%E6%8D%AE%E6%BA%90%E6%A8%A1%E6%9D%BF%E9%80%89%E6%8B%A9.png) #### 6.生成代码 ![输入图片说明](sql/%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90.png) ### 代码样例 #### entiy 代码样例 ``` package com.wtf.test.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.Date; import lombok.Data; /** * * * @author wtf * @email 496558736@qq.com * @date 2023-07-05 16:40:15 */ @Data @TableName("t_1") public class T1 implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId private Integer id; /** * 名称 */ private String name; } ``` #### mapper 代码样例 ``` package com.wtf.test.mapper; import com.wtf.test.entity.T1; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * * * @author wtf * @email 496558736@qq.com * @date 2023-07-05 16:40:15 */ @Mapper public interface T1Mapper extends BaseMapper { } ``` #### service 代码样例 ``` package com.wtf.test.service; import com.baomidou.mybatisplus.extension.service.IService; import com.smart.tax.common.util.PageUtils; import com.wtf.test.entity.T1; import java.util.Map; /** * * * @author wtf * @email 496558736@qq.com * @date 2023-07-05 16:40:15 */ public interface T1Service extends IService { PageUtils queryPage(Map params); } ``` #### service.impl 代码样例 ``` package com.wtf.test.service.impl; import org.springframework.stereotype.Service; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.smart.tax.common.util.PageUtils; import com.smart.tax.common.util.Query; import com.smart.tax.common.base.R; import com.wtf.test.mapper.T1Mapper; import com.wtf.test.entity.T1; import com.wtf.test.service.T1Service; @Service("t1Service") public class T1ServiceImpl extends ServiceImpl implements T1Service { @Override public PageUtils queryPage(Map params) { IPage page = this.page( new Query().getPage(params), new QueryWrapper() ); return new PageUtils(page); } } ``` #### controller 代码样例 ``` package com.wtf.test.controller; import java.util.Arrays; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.wtf.test.entity.T1; import com.wtf.test.service.T1Service; import com.smart.tax.common.util.PageUtils; import com.smart.tax.common.base.R; /** * * * @author wtf * @email 496558736@qq.com * @date 2023-07-05 16:40:15 */ @RestController @RequestMapping("test/t1") public class T1Controller { @Autowired private T1Service t1Service; /** * 列表 */ @PostMapping("/list") //@RequiresPermissions("test:t1:list") public R list(@RequestBody Map params){ PageUtils page = t1Service.queryPage(params); return R.ok(page); } /** * 信息 */ @PostMapping("/info/{id}") //@RequiresPermissions("test:t1:info") public R info(@PathVariable("id") Integer id){ T1 t1 = t1Service.getById(id); return R.ok(t1); } /** * 保存 */ @PostMapping("/save") //@RequiresPermissions("test:t1:save") public R save(@RequestBody T1 t1){ t1Service.save(t1); return R.ok(); } /** * 修改 */ @PostMapping("/update") //@RequiresPermissions("test:t1:update") public R update(@RequestBody T1 t1){ t1Service.updateById(t1); return R.ok(); } /** * 删除 */ @PostMapping("/delete") //@RequiresPermissions("test:t1:delete") public R delete(@RequestBody Integer[] ids){ t1Service.removeByIds(Arrays.asList(ids)); return R.ok(); } } ``` #### mapper.xml 代码样例 ``` ```