当前使用版本(必填,否则不予处理)

v3.5.3

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用代码生成器时,发现模板里面主键生成这块有个问题,如果是是非自增主键并且没有配置enableTableFieldAnnotation。那么tableId这个注解就不会加上,而不加taleId注解时,byId类的查询就不能用,如果这样的话,生成tableiid注解时完全可以把#elseif(${field.convert})这个判断去掉就行了

重现步骤(如果有就写完整)

MyBatis-Plus 代码生成器非自增主键没有生成注解

报错信息

Comment From: Bin1993

我咋试了非自增主键可以生成注解呢,你是用的的3.5.3.1版本吗?你的建表语句发个出来看看,还有生成代码的配置也发出来看看

Comment From: tlinsion

我咋试了非自增主键可以生成注解呢,你是用的的3.5.3.1版本吗?你的建表语句发个出来看看,还有生成代码的配置也发出来看看

我用的3.5.3版本的 CREATE TABLEt_asset(user_idbigint unsigned NOT NULL COMMENT '用户id',balancedecimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '余额', PRIMARY KEY (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='余额表'; 我这边用了自定义的controller,用到了点自定义数据,其他的没什么了 ` public class MybatisPlus {

private static final String URL = "jdbc:mysql://ip:3306/demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai";
private static final String USERNAME = "name";
private static final String PASSWORD = "pwd";
private static final String BASE_PATH = new ApplicationHome().getDir().getAbsolutePath() + "/system/";


public static void main(String[] args) {
    GeneratorParam param = new GeneratorParam()
            .setTablePrefix("t_")
            .setTableName("t_asset")
            .setModuleName("system")
            .setOutPath(BASE_PATH)
            .setPackName("cn.lin")
            .setApiTags("用户资产接口")
            .setPermPrefix("user:asset")
            .setPremlist(true)
            .setPremQuery(true)
            .setPremNew(true)
            .setPremUpd(true)
            .setPremDel(true);
    generator(param);

}

private static void generator(GeneratorParam... params) {
    for (GeneratorParam param : params) {
        FastAutoGenerator.create(URL, USERNAME, PASSWORD)
                .globalConfig(builder -> {
                    builder.author("lin") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .disableOpenDir();
                    if (StringUtils.hasText(param.getOutPath())) {
                        builder.outputDir(param.getOutPath() + "src/main/java"); // 指定输出目录
                    }
                })
                .packageConfig(builder -> {
                    if (StringUtils.hasText(param.getPackName())) {
                        builder.parent(param.getPackName());// 设置父包名
                    }
                    if (StringUtils.hasText(param.getModuleName())) {
                        builder.moduleName(param.getModuleName());// 设置父包模块名
                    }
                    if (StringUtils.hasText(param.getOutPath())) {
                        builder.pathInfo(Collections.singletonMap(OutputFile.xml, param.getOutPath() + "src/main/resources/mapper"));
                    }
                })
                .strategyConfig(builder -> {
                    if (StringUtils.hasText(param.getTablePrefix())) {
                        builder.addTablePrefix(param.getTablePrefix());
                    }
                    if (StringUtils.hasText(param.getTableName())) {
                        builder.addInclude(param.getTableName());
                    }
                    builder.entityBuilder()
                            .enableLombok()
                            .enableChainModel()

//如果这里没有手动设置IdType的值,生成的实体类,非自增的主键就不会有tableId的注解 .idType(IdType.INPUT) .enableFileOverride().build(); .controllerBuilder() .enableRestStyle() .enableFileOverride() .build(); // 设置过滤表前缀 }) .templateConfig(builder -> builder.controller("/tmpl/controller.java").build()) .injectionConfig(builder -> { Map injParam = new HashMap() {{ put("premlist", param.isPremlist()); put("premQuery", param.isPremQuery()); put("premNew", param.isPremNew()); put("premUpd", param.isPremUpd()); put("premDel", param.isPremDel()); }}; if (StringUtils.hasText(param.getApiTags())) { injParam.put("apiTags", param.getApiTags()); } if (StringUtils.hasText(param.getPermPrefix())) { injParam.put("permPrefix", param.getPermPrefix()); } builder.customMap(injParam).build(); }) .execute(); } } } `