将MySQL建表语句(CREATE TABLE)逆向生成Java实体类(以DO结尾)、Mapper、Service和ServiceImpl,自动添加MyBatis-Plus和Lombok注解。
使用转换脚本生成实体类:
python scripts/sql_to_entity.py your_table.sql -o User.java
python scripts/sql_to_entity.py your_table.sql -o User.java -p com.example.entity
python scripts/sql_to_entity.py your_table.sql --all --output-dir ./src/main/java/com/example -p com.example.entity
# 不使用Lombok
python scripts/sql_to_entity.py your_table.sql --no-lombok
# 不使用MyBatis-Plus
python scripts/sql_to_entity.py your_table.sql --no-mybatis-plus
自动将MySQL数据类型映射为Java类型:
详细映射关系见 references/mysql_to_java_types.md
自动生成以下注解:
@TableName: 表名映射(仅包含表名)@TableId(type = IdType.ASSIGN_ID): 主键标记,使用雪花算法@TableField: 字段映射(当字段名与列名不同时)@TableField(fill = FieldFill.INSERT): create_time字段自动填充@TableField(fill = FieldFill.INSERT_UPDATE): update_time字段自动填充详细说明见 references/mybatis_plus_annotations.md
自动生成以下注解:
@Data: 生成getter/setter/equals/hashCode/toString@Builder: 支持建造者模式@NoArgsConstructor: 生成无参构造函数@AllArgsConstructor: 生成全参构造函数@Slf4j: ServiceImpl中自动生成日志对象详细说明见 references/lombok_annotations.md
@JsonFormat(shape = JsonFormat.Shape.STRING): ID字段防止前端精度丢失自动提取SQL中的COMMENT作为Java字段注释:
`user_name` VARCHAR(50) COMMENT '用户姓名'
生成:
/** 用户姓名 */
private String userName;
自动生成包含表注释、作者和创建时间的文档注释:
/**
* 用户表
*
* @author Auto Generated
* @date 2026-04-09 10:50:00
*/
CREATE TABLE `t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_name` VARCHAR(50) NOT NULL COMMENT '用户名',
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
`age` INT(11) DEFAULT NULL COMMENT '年龄',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
package com.example.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 用户表
*
* @author Auto Generated
* @date 2026-04-09 10:50:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_user")
public class UserDO implements Serializable {
private static final long serialVersionUID = 1L;
/** 主键ID */
@TableId(type = IdType.ASSIGN_ID)
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;
/** 用户名 */
@TableField("user_name")
private String userName;
/** 邮箱 */
private String email;
/** 年龄 */
private Integer age;
/** 创建时间 */
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 更新时间 */
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
package com.example.mapper;
import com.example.entity.UserDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 用户表 Mapper接口
*
* @author Auto Generated
* @date 2026-04-09 10:50:00
*/
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {
}
package com.example.service;
import com.example.entity.UserDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* 用户表 Service接口
*
* @author Auto Generated
* @date 2026-04-09 10:50:00
*/
public interface UserService extends IService<UserDO> {
}
package com.example.service.impl;
import com.example.entity.UserDO;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
/**
* 用户表 Service实现类
*
* @author Auto Generated
* @date 2026-04-09 10:50:00
*/
@Slf4j
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserDO> implements UserService {
}
可以编写shell脚本批量转换多个SQL文件:
#!/bin/bash
for sql_file in sqls/*.sql; do
table_name=$(basename "$sql_file" .sql)
python scripts/sql_to_entity.py "$sql_file" --all --output-dir ./src/main/java/com/example -p com.example.entity
done
如需自定义生成模板,可以修改 scripts/sql_to_entity.py 中的以下函数:
generate_java_entity: 实体类生成generate_java_mapper: Mapper接口生成generate_java_service: Service接口生成generate_java_service_impl: ServiceImpl实现类生成共 1 个版本