AI 辅助开发
传统的代码生成器在 AI 时代已经不再需要。死板的模板、千篇一律的代码、繁琐的配置...这些都可以交给 AI 来处理。
为什么不用代码生成器了
- 模板固定: 传统生成器的代码风格单一,难以适应业务变化
- 维护成本高: 每次框架升级都要同步更新模板
- 学习成本: 新成员需要花时间理解模板规则
- AI 更灵活: 自然语言交互,代码更贴合实际需求
拥抱 AI 开发工具
现在的 AI 编程工具已经非常成熟,完全可以替代传统的代码生成器:
| 工具 | 特点 |
|---|---|
| 通义千问 | 中文优化,国内首选 |
| Cursor | IDE 深度集成,强烈推荐 |
| GitHub Copilot | 生态完善 |
| Claude | 长上下文,理解力强 |
如何用 AI 生成代码
第一步:告诉 AI 你的需求和项目规范
复制以下内容,告诉 AI:
我正在使用 MolanDev Cloud 项目开发一个企业级管理系统。
技术栈:
- Spring Boot 3.x + MyBatis Plus
- 实体类以 Entity 结尾,如 SysUserEntity
- Service 直接继承 ServiceImpl,不使用接口+实现类
- Controller 使用 JsonResult 统一返回
- SQL 使用 JDK 17 三引号 + @Select 注解,不使用 XML
请帮我生成一个商品管理模块,包含:
1. 实体类 ProductEntity
2. Mapper ProductMapper
3. Service ProductService
4. Controller ProductController
要求实现标准的增删改查接口:
- POST /product/info 查询详情
- POST /product/add 新增
- POST /product/edit 编辑
- POST /product/delete 删除
- POST /product/list 分页列表第二步:根据实际业务调整细节
AI 生成的代码可能不完全符合你的需求,需要根据实际情况调整:
- 添加业务逻辑
- 修改字段名称
- 增加参数校验
- 添加权限注解
第三步:让 AI 解释或优化代码
请解释这段代码中的 LambdaQueryWrapper 是如何工作的?这个 Service 方法的事务配置是否正确?如何优化?实战示例:从表结构到完整接口
需求
创建一个商品管理模块,表结构如下:
sql
CREATE TABLE product (
id VARCHAR(36) PRIMARY KEY,
product_name VARCHAR(100) COMMENT '商品名称',
price DECIMAL(10,2) COMMENT '价格',
stock INT COMMENT '库存',
category VARCHAR(50) COMMENT '分类',
create_time DATETIME COMMENT '创建时间',
update_time DATETIME COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除状态'
);让 AI 生成代码
Prompt:
我有一个商品表,表结构如下:
CREATE TABLE product (
id VARCHAR(36) PRIMARY KEY,
product_name VARCHAR(100) COMMENT '商品名称',
price DECIMAL(10,2) COMMENT '价格',
stock INT COMMENT '库存',
category VARCHAR(50) COMMENT '分类',
create_time DATETIME COMMENT '创建时间',
update_time DATETIME COMMENT '更新时间',
deleted TINYINT(1) DEFAULT 0 COMMENT '删除状态'
);
请按照 MolanDev Cloud 规范生成完整代码:
1. 实体类 ProductEntity(使用 Lombok、MyBatis Plus 注解)
2. Mapper ProductMapper
3. Service ProductService(继承 ServiceImpl)
4. Controller ProductController(标准增删改查接口)
要求:
- Entity 以 Entity 结尾
- 使用 @TableLogic 标记逻辑删除
- createTime 和 updateTime 使用 FieldFill 自动填充
- Controller 使用 JsonResult 统一返回
- 使用 @ParameterObject 接收参数
- 分页接口返回 PageResultAI 生成的代码
实体类:
java
@Getter
@Setter
@TableName("product")
@Schema(description = "商品")
public class ProductEntity {
@Schema(description = "主键标识")
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
@Schema(description = "商品名称")
@TableField("product_name")
private String productName;
@Schema(description = "价格")
@TableField("price")
private BigDecimal price;
@Schema(description = "库存")
@TableField("stock")
private Integer stock;
@Schema(description = "分类")
@TableField("category")
private String category;
@Schema(description = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@Schema(description = "更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@Schema(description = "删除状态")
@TableField(value = "deleted", fill = FieldFill.INSERT)
@TableLogic
private Boolean deleted;
}Mapper:
java
public interface ProductMapper extends BaseMapper<ProductEntity> {
}Service:
java
@Service
@Transactional(rollbackFor = Exception.class)
public class ProductService extends ServiceImpl<ProductMapper, ProductEntity> {
}Controller:
java
@Tag(name = "商品管理")
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Operation(summary = "商品信息")
@PostMapping("/info")
public JsonResult<ProductEntity> info(@RequestParam String id) {
if (StringUtils.isEmpty(id)) {
return JsonResult.invalid("主键不能为空");
}
return JsonResult.success(productService.getById(id));
}
@Operation(summary = "新增商品")
@PostMapping("/add")
@HasPermission("product:add")
@OpLog(title = "新增商品", type = OpTypes.ADD, module = "商品管理")
public JsonResult<String> add(@ParameterObject ProductEntity product) {
if (StringUtils.isNotEmpty(product.getId())) {
return JsonResult.invalid("主键不能有值");
}
productService.save(product);
return JsonResult.success(product.getId());
}
@Operation(summary = "编辑商品")
@PostMapping("/edit")
@HasPermission("product:edit")
@OpLog(title = "编辑商品", type = OpTypes.UPDATE, module = "商品管理")
public JsonResult<Void> edit(@ParameterObject ProductEntity product) {
if (StringUtils.isEmpty(product.getId())) {
return JsonResult.invalid("主键不能为空");
}
productService.saveOrUpdate(product);
return JsonResult.success();
}
@Operation(summary = "删除商品")
@PostMapping("/delete")
@HasPermission("product:delete")
@OpLog(title = "删除商品", type = OpTypes.DELETE, module = "商品管理")
public JsonResult<Void> delete(@RequestParam String id) {
if (StringUtils.isEmpty(id)) {
return JsonResult.invalid("主键不能为空");
}
productService.removeById(id);
return JsonResult.success();
}
@Operation(summary = "分页查询商品")
@PostMapping("/list")
public JsonResult<PageResult<ProductEntity>> list(
@ParameterObject PageQuery pageQuery,
@ParameterObject ProductEntity product) {
Page<ProductEntity> page = productService.page(
DbQueryUtils.toPage(pageQuery),
Wrappers.query(product)
);
return JsonResult.success(DbQueryUtils.pageResult(page));
}
}验证和调整
生成的代码可以直接使用,根据实际需求调整:
- 添加参数校验(如 @Validated)
- 增加业务逻辑(如库存检查)
- 添加自定义查询方法
- 优化 SQL(如多表关联)
常用 Prompt 模板
生成实体类
请按照 MolanDev Cloud 规范生成实体类:
表名: xxx
字段: [列出字段]
要求:
- 以 Entity 结尾
- 使用 Lombok @Getter @Setter
- 使用 @TableName、@TableId、@TableField
- 使用 @TableLogic 标记逻辑删除
- createTime 和 updateTime 使用 FieldFill 自动填充生成 Service
请生成 Service 类:
实体类: XxxEntity
Mapper: XxxMapper
要求:
- 继承 ServiceImpl<XxxMapper, XxxEntity>
- 使用 @Service 和 @Transactional
- 添加自定义业务方法(描述你的需求)生成 Controller
请生成 Controller 类:
Service: XxxService
实体类: XxxEntity
路径: /xxx
要求:
- 标准增删改查接口(info/add/edit/delete/list)
- 使用 @Tag、@Operation
- 使用 @HasPermission 和 @OpLog
- 使用 JsonResult 统一返回
- 使用 @ParameterObject 接收参数调试技巧
1. 使用 IDEA 调试
- 在 Service 方法打断点
- 使用 Debug 模式启动
- 查看变量值和执行流程
2. 查看日志
yaml
# application-local.yml
logging:
level:
com.molandev: debug # 查看框架日志
org.springframework: info # 查看 Spring 日志3. 使用接口文档
访问 Knife4j 接口文档: http://localhost:9099/doc.html
- 测试接口是否正常
- 查看请求参数和返回结构
- 快速调试前端
4. 常见问题
问题: 接口返回 404
解决: 检查 @RequestMapping 路径是否正确
问题: 数据库查询为空
解决: 检查数据源配置、表名是否正确
问题: 权限不足
解决: 检查 @HasPermission 权限码是否已分配给用户
总结
AI 辅助开发的优势:
- ✅ 灵活: 自然语言描述需求,代码贴合业务
- ✅ 高效: 秒级生成,无需手动编写模板
- ✅ 易学: 无需理解复杂的模板规则
- ✅ 智能: AI 可以解释代码、优化代码
忘掉那些复杂的模板配置吧,选择一个顺手的 AI 工具,用自然语言描述你的需求,让 AI 帮你生成符合规范的代码。