版本: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}> {

}

生成成功

MyBatis-Plus 代码生成器是否支持不生成 Service interface?

测试通过

MyBatis-Plus 代码生成器是否支持不生成 Service interface?

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>

MyBatis-Plus 代码生成器是否支持不生成 Service interface?