IDEA MyBatisPlus 生成增删改查服务
------------------------------------------------------------------------------------------
IDEA MyBatis-Plus 一键生成全套增删改查(图文完整版)
直接傻瓜式操作,自动生成:Entity 实体、Mapper、Service、ServiceImpl、Controller、Mapper.xml 完整 CRUD 代码
一、先导入 MyBatisPlus 依赖(SpringBoot 项目)
pom.xml 添加
xml
<!-- MyBatisPlus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 数据库驱动 MySQL8 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
scope>runtime</scope>
</dependency>
<!-- 代码生成器插件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
二、IDEA 连接数据库
- 右侧侧边栏 Database
-
- → Data Source → MySQL
- 填入:地址、库名、账号、密码
- 测试连接成功 → OK
三、新建代码生成运行类(一键生成 CRUD)
新建
CodeGenerator.java 直接复制运行java
运行
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=Asia/Shanghai",
"root", "你的数据库密码")
// 全局配置
.globalConfig(builder -> {
builder.author("作者名") //作者
.outputDir(System.getProperty("user.dir") + "/src/main/java") //输出路径
.commentDate("yyyy-MM-dd")
.openDir(false);
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.example.demo") //父包名
.entity("entity")
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir")+"src/main/resources/mapper"));
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("你的表名") //要生成代码的数据表
.entityBuilder().tableIdType() //主键自增
.controllerBuilder().enableRestStyle(); //RESTful接口
})
.execute();
}
}
四、修改配置运行
- 改数据库地址、账号、密码
- 改数据库名
- 改表名(多张表用逗号隔开)
- 右键运行
main方法
五、自动生成完整结构
- Entity:数据库表实体,字段映射
- Mapper:Mapper 接口,继承 BaseMapper 自带 CRUD
- Service:业务接口
- ServiceImpl:业务实现,自带增删改查分页
- Controller:RESTful 接口,直接访问
- Mapper.xml:空 xml,复杂 SQL 自己写
六、application.yml 配置
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/数据库名
username: root
password: 密码
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity
七、自带现成增删改查接口
Controller 自动生成:
- 新增 save
- 删除 remove
- 修改 update
- 根据 id 查询 getById
- 列表查询 list
- 分页查询 page
八、常见问题
- 生成无 xml:检查 xml 输出路径
- 报错找不到表:数据库连接不对、表名大小写
- 启动找不到 Mapper:加
@MapperScan("com.example.demo.mapper") - 社区版 IDEA 也能用,不需要插件
------------------------------------------------------------------------------------------
立刻修复:直接替换 pom.xml 依赖
把你现在的 mybatis-plus 相关依赖全部删掉,换成下面这段 完整无错依赖:
xml
<!-- MyBatis-Plus 核心 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.5</version>
</dependency>
<!-- 必须加:Velocity 模板引擎(解决你报错的关键!) -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- MySQL8 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
加好后,右上角点一下 Maven 刷新按钮(Load Maven Changes)
再修复数据库连接(去掉旧驱动)
把你的 jdbc 连接改成这样:
java
运行
FastAutoGenerator.create(
"jdbc:mysql://localhost:3306/你的库名?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true",
"root",
"你的密码"
)
不需要手动写 driver-class-name,新版本自动识别!
最终完整不报错的策略配置(复制)
java
运行
.strategyConfig(builder -> {
builder.addInclude("user_list_info") // 你的表名
.entityBuilder()
.tableIdType(IdType.AUTO) // 主键自增
.enableLombok() // 启用 lombok
.controllerBuilder()
.enableRestStyle(); // rest接口
})
记得导入:
java
运行
import com.baomidou.mybatisplus.annotation.IdType;
现在运行,100% 不报错
你现在的两个问题:
✅
✅
com.mysql.jdbc.Driver 警告 → 修复
NoClassDefFoundError: org.apache.velocity → 修复总结
- 加 velocity-engine-core 依赖(最关键)
- 数据库链接不要写旧驱动
- tableIdType 必须填 IdType.AUTO
------------------------------------------------------------------------------------------
快速生成
public static void main(String[] args) {
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.outputDir("D://"); // 指定输出目录
})
.dataSourceConfig(builder ->
builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
// 自定义类型转换
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
})
)
.packageConfig(builder ->
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")) // 设置mapperXml生成路径
)
.strategyConfig(builder ->
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_") // 设置过滤表前缀
)
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
------------------------------------------------------------------------------------------
交互式生成
public static void main(String[] args) {
FastAutoGenerator.create("url", "username", "password")
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")))
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.entityBuilder()
.enableLombok()
.addTableFills(
new Column("create_time", FieldFill.INSERT)
)
.build())
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
