版本:3.3.2
询问一下能否可以不生成 service interface?因为我们的服务简单,对于个人来说徒增功耗。
没有在网上及代码里找到相关信息,只好来此询问
Comment From: qmdx
https://mybatis.plus/guide/generator.html 例如关闭 xml 生成
templateConfig.setXml(null);
Comment From: huangluyu
@qmdx 感谢回复。在提出问题前我已经进行了测试,但与关闭 xml 不同的是,如果我使用
templateConfig.setService(null)
那么仍然会创建 Impl 文件夹,其中生成的 XxxServiceImpl 仍然会以 Impl 结尾,并且 import 和 implement 一个不存在的 interface XxxService。
倒是可以自己定义模板,但我初步推测至少无法解决 Impl 文件夹的问题? 是否有某种策略可以使 Service 以非接口的方式生成?
Comment From: qmdx
@huangluyu 更多你需要研究下文档,有必要可用阅读下源码
setServiceImpl(null)
// 名字可用格式化例如
setServiceImplName("%sServiceImpl")
Comment From: shamart
完全答非所问啊,无语了,这么喜欢close ?
Comment From: chenbihao
估计没有,我看模板文件里没有单Service的实现,不过可以自己写个模板:
生成器添加:
// 自定义Service模板 文件名
globalConfig.setServiceName("%sService");
// 关闭原有生成
templateConfig.setService(null);
templateConfig.setServiceImpl(null);
// 下面这行自定义Service类,因为自带模板的是Service接口+实现类,这里只想要Service类,不想要接口,所以自定义Service模板
String serviceTemplatePath = "/templates/vm/myService.java.vm";
// 自定义输出配置
List<FileOutConfig> fileOutConfigList = new ArrayList<>();
// 自定义Service模板 (如不需要就去掉)
fileOutConfigList.add(new FileOutConfig(serviceTemplatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + outFileUrl + "service/" + packageConfig.getModuleName()
+ "/" + tableInfo.getEntityName() + "Service" + StringPool.DOT_JAVA;
}
});
injectionConfig.setFileOutConfigList(fileOutConfigList);
generator.setCfg(injectionConfig);
自定义模板/templates/vm/myService.java.vm:
package ${package.Service};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* $!{table.comment} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
public class ${table.serviceName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> {
}
生成成功
测试通过
Comment From: vewWLE829
@chenbihao 感谢你的回答. 我把你的答案,官方新版案例,和下面连接.结合起来.我写出了自己的代码 https://blog.csdn.net/qq_46452300/article/details/124384765
生成器代码
@Test
@Ignore
public void testGenCode() {
String url = "jdbc:mysql://localhost:3306/test_my?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false";
String user = "root";
String password = "123456";
FastAutoGenerator.create(url, user, password)
.globalConfig(builder -> {
builder.author("vincent") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("E://gen_code"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.your.module") // 设置父包名
.moduleName("xxxx") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "E://gen_code/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("person") // 设置需要生成的表名
.addTablePrefix("t_", "c_")// 设置过滤表前缀
.serviceBuilder().formatServiceFileName("%sService"); // 设置service文件名称
})
.templateConfig(builder -> {
builder.service("/templates/service.java") // 自定义service模板
.disable(TemplateType.SERVICEIMPL); // 不生成ServiceImpl
})
.templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
模板 src/test/resources/templates/service.java.vm
package ${package.Service};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* $!{table.comment} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
public class ${table.serviceName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> {
}
相关依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--Mysql jdbc驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>