mybatis plus代码生成时包名和路径的混淆解释
pr:代码生成器会出现mapper文件的接口没有加上@Mapper注解。需要在启动类上扫描。Springboot默认MapperScan是在classpath(resource)里,而mybatis plus生成的mapper文件会放到java文件夹里,要改。
@MapperScan("com.msb.mapper")
pr:代码生成文件后,有时会需要用idea的rebuild重新编译才会生效,maven的clean和compile不管用。
Error:Kotlin: Module was compiled with an incompatible version of Kotlin.
Note:包路径和磁盘路径不一样,包路径是在磁盘路径之后又加入了路径,但是java类上的package路径只是从包路径开始。而包路径用点连接,磁盘路径用斜杠连接。
下面是官网的交互式生成代码的版本
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride())
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
.controllerBuilder().enableRestStyle().enableHyphenStyle()
.entityBuilder().enableLombok().addTableFills(
new Column("create_time", FieldFill.INSERT)
).build())
/*
模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker
.templateEngine(new BeetlTemplateEngine())
.templateEngine(new FreemarkerTemplateEngine())
*/
.execute();
// 处理 all 情况
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
这段生成代码的错误是没有指定具体代码生成的位置,代码块里的“请输入包名?”其实是父包的名字,而不是路径。路径默认是D盘。
添加路径配置后如下述。 这个outputDir就是输出路径的位置,需要在globalConfig对象上的builder配置。
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?"))
.fileOverride().outputDir("D:\\msbpro\\dongbao\\msb-dongbao-mall-parent\\msb-dongbao-service\\msb-dongbao-ums\\src\\main"))
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?")))
可以点此看官网上更多的配置信息
下面的packageConfig是配置包名的,即class文件首行的package位置,注意要用点来分隔。例如下述的package更多的配置,添加这个配置不是说再另外new一个对象,需要在已有的builder对象上赋属性值。
new PackageConfig.Builder()
.parent("com.baomidou.mybatisplus.samples.generator")
.moduleName("sys")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.xml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
.build();
下图是交互过程
下述是需要额外引入的依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
代码生成实体类时,如果对应的表格没有主键,plus生成的实体类会没有@TableId注解,这导致执行insert时必须再手动加上这个注解,对应一个主键。不然会用默认的名字,匹配不上便会报错。
设置主键时要用int类型的自增主键。
@TableId(value = "userId", type = IdType.AUTO)
// 默认主键名会变成user_id
Note:如果用xml文件时,需要在pom文件中配置resource,使xml文件编译进target目录。不然会报mapper找不到:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
@mapper注解,mapperscan和classpath,三者都可以生成xml的位置。具体区别:点击,看三者区别
本文详细解释了MyBatis Plus代码生成器在使用过程中遇到的包名与路径混淆问题,包括Mapper文件缺少@Mapper注解、代码生成后的生效策略、包路径与磁盘路径的区别。此外,还提到了交互式生成代码的配置方法,如outputDir用于设置输出路径,packageConfig用于配置包名。当实体类缺少主键时,需要手动添加@TableId注解。同时,XML文件的配置及@Mapper、MapperScan、classpath在生成XML位置的区别也进行了说明。
2680

被折叠的 条评论
为什么被折叠?



