# codegenerator
**Repository Path**: linjie92/codegenerator
## Basic Information
- **Project Name**: codegenerator
- **Description**: java代码生成工具,依据数据表字段可根据自定义模板生成符合项目规范的代码。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-03-22
- **Last Updated**: 2025-07-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Java代码生成器
一个基于 Electron 的 Java 代码生成器,可根据数据表按模板生成对应的代码。可自定义模版。

## 快速开始
```bash
# 安装依赖
npm install
# 运行
npm start
```
## 打包发布
```bash
# 清理旧的构建文件
rm -rf dist && rm -rf release
# 构建前端代码
npm run build
# 打包所有平台
npm run dist
# 打包 Mac 版本 (生成 DMG 和 ZIP)
npm run dist:mac
# 打包 Windows 版本
npm run dist --win
# 打包 Linux 版本
npm run dist --linux
# 仅打包不生成安装包 (用于测试)
npm run pack
```
**打包后的文件位置:**
- 打包文件会生成在 `release/` 目录下
- Mac: `代码生成器-1.0.0-arm64.dmg` 和 `代码生成器-1.0.0-arm64-mac.zip`
- Windows: `代码生成器 Setup 1.0.0.exe` 和 `代码生成器-1.0.0-win.zip`
- Linux: `代码生成器-1.0.0.AppImage` 和 `代码生成器_1.0.0_amd64.deb`
## 模板变量说明
### 1. 包相关变量
- {{package.base}} - 基础包名
- {{package.module}} - 模块名
### 2. 表相关变量
- {{table.name}} - 表名
- {{table.className}} - 类名(首字母大写) 例如:表user_info -> UserInfo
- {{table.classNameLower}} - 类名(首字母小写) 例如:表user_info -> userInfo
- {{table.nameLower}} - 类名全小写 例如:表user_info -> userinfo
- {{table.comment}} - 表注释
- {{table.fields}} - 字段列表,每个字段包含以下属性:
- columnName: 数据库字段名 例如:user_name
- fieldName: Java字段名(首字母小写) 例如:user_name -> userName
- fieldNameUpper: Java字段名(首字母大写) 例如:user_name -> UserName
- javaType: Java类型
- comment: 字段注释
- isPrimaryKey: 是否主键
- {{table.excludeFields}} - 排除的字段列表
### 3. 工具变量
- {{author}} - 作者
- {{date}} - 当前日期
- {{serialVersionUID}} - 序列化ID(19位数字,根据类名自动生成且唯一)
- {{hasDate}} - 是否包含日期类型字段(true/false)
- {{hasBigDecimal}} - 是否包含BigDecimal类型字段(true/false)
### 4. 全局自定义变量 【暂未实现】
- {{vars.xxx}} - 全局变量
### 5.条件语句
```xml
{{#if condition}}
// 代码块
{{else}}
// 代码块
{{/if}}
```
### 6. 循环语句
```xml
{{#each table.fields}}
// 代码块
// {{javaType}} {{fieldName}};
{{/each}}
```
## 模板代码示例(详细可参考默认模板 /templates/**)
### Java实体类
```java
package {{package.base}}.entity;
import lombok.Data;
import java.io.Serializable;
{{#if hasDate}}
import java.util.Date;
{{/if}}
{{#if hasBigDecimal}}
import java.math.BigDecimal;
{{/if}}
/**
* {{table.comment}}
* @author {{author}}
* @date {{date}}
*/
@Data
public class {{table.className}} implements Serializable {
private static final long serialVersionUID = {{serialVersionUID}}L;
{{#each table.fields}}
/**
* {{comment}}
*/
private {{javaType}} {{fieldName}};
{{/each}}
}
```
### mapper.xml
```xml
INSERT INTO {{table.name}} (
)
VALUES (
{{#each table.fields}} // 普通循环
#{ {{fieldName}} }{{#if @last}}{{else}},{{/if}} // 判断是否是最后一个
{{/each}}
)
DELETE FROM {{table.name}}
WHERE id = #{id}
UPDATE {{table.name}}
{{#each table.fields}}
{{#if (includes ../table.excludeFields columnName)}} // 循环时,排除字段
{{else}}
{{columnName}} = #{ {{fieldName}} }{{#if @last}}{{else}},{{/if}}
{{/if}}
{{/each}}
WHERE id = #{id}
```