mybatis flex 自定义代码模板

在resources下建立templates文件夹放置模板文件。通过 GlobalConfig(全局配置)的 setTemplateEngine() 方法,可以配置自己的模板引擎以及模板

GlobalConfig globalConfig = new GlobalConfig();
   globalConfig.getTemplateConfig().setTemplate(new EnjoyTemplate()).setController("/templates/controller.tpl");
        globalConfig.getTemplateConfig().setTemplate(new EnjoyTemplate()).setEntity("/templates/entity.tpl");

可以先在tpl模板文件里只写

#(table)

然后能查看有什么变量

贴一下通过Gemini写的模板文件

#-- 1. 先利用 StringUtil 计算所有需要的变量名 --#
#set(entityVarName = underlineToCamel(table.name))
#set(entityClassName = firstCharToUpperCase(entityVarName))
#set(serviceClassName = entityClassName + "Service")
#set(serviceVarName = entityVarName + "Service")
#set(controllerClassName = entityClassName + "Controller")
#set(comment = table.comment ? table.comment : table.remarks)
package #(packageConfig.controllerPackage);

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import #(packageConfig.entityPackage).#(entityClassName);
import #(packageConfig.servicePackage).#(serviceClassName);
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.annotation.Resource;

import java.io.Serializable;
import java.util.List;

import static #(packageConfig.entityPackage).table.#(entityClassName)TableDef.#(entityVarName);

/**
 * #(comment) 控制层。
 *
 * @author #(javadocConfig.author)
 * @since #(javadocConfig.since)
 */
@Validated
@RestController
@Tag(name = "#(entityVarName)", description = "#(comment)")
@RequestMapping("/#(entityVarName)")
public class #(controllerClassName) {

    @Resource
    private #(serviceClassName) #(serviceVarName);

    @GetMapping("/page")
    @Operation(summary = "分页查询#(comment)")
    public Page<#(entityClassName)> #(entityVarName)Page(Integer pageNum, Integer pageSize) {
        Page<#(entityClassName)> page = new Page<>(pageNum, pageSize);
        QueryWrapper queryWrapper = QueryWrapper.create()
                .select(#(entityVarName).all_columns)
                .from(#(entityVarName));
        return #(serviceVarName).page(page, queryWrapper);
    }

    @GetMapping("/list")
    @Operation(summary = "查询所有#(comment)")
    public List<#(entityClassName)> #(entityVarName)List() {
        return #(serviceVarName).list();
    }

    @GetMapping("/getInfo/{id}")
    @Operation(summary = "根据主键获取#(comment)")
    public #(entityClassName) #(entityVarName)GetInfo(@PathVariable Serializable id) {
        return #(serviceVarName).getById(id);
    }

    @PostMapping("/save")
    @Operation(summary = "保存#(comment)")
    public boolean #(entityVarName)Save(@RequestBody #(entityClassName) #(entityVarName)) {
        return #(serviceVarName).save(#(entityVarName));
    }

    @PutMapping("/update")
    @Operation(summary = "根据主键更新#(comment)")
    public boolean #(entityVarName)Update(@RequestBody #(entityClassName) #(entityVarName)) {
        return #(serviceVarName).updateById(#(entityVarName));
    }

    @DeleteMapping("/remove")
    @Operation(summary = "根据主键删除#(comment)")
    public boolean #(entityVarName)Remove(@RequestBody List<Integer> ids) {
        return #(serviceVarName).removeByIds(ids);
    }

}
#-- 1. 变量预计算与逻辑检查 --#
#set(entityVarName = underlineToCamel(table.name))
#set(entityClassName = firstCharToUpperCase(entityVarName))
#set(tableComment = table.comment ? table.comment : table.remarks)
#-- 检查是否需要导入 KeyGenerators (用于雪花算法) --#
#set(needKeyGenerators = false)
#set(needColumn = false)
#for(col : table.columns)
    #if(table.primaryKeys.contains(col.name) && (col.propertyType == "java.lang.Long" || col.propertyType == "long"))
        #set(needKeyGenerators = true)
        #break
    #end
    #if(col.property == "createTime" || col.property == "updateTime")
        #set(needColumn = true)
        #break
    #end
#end
package #(packageConfig.entityPackage);

#if(needColumn)
import com.mybatisflex.annotation.Column;
#end
import com.mybatisflex.annotation.Id;
#if(needKeyGenerators)
import com.mybatisflex.core.constant.KeyGenerators;
#end
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;

import java.io.Serial;
import java.io.Serializable;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * #(tableComment) 实体类。
 *
 * @author #(javadocConfig.author)
 * @since #(javadocConfig.since)
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "#(tableComment)")
@Table(value = "#(table.name)")
public class #(entityClassName) implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    #for(col : table.columns)
    #set(propName = col.property)
    #set(fullType = col.propertyType)
    #set(simpleType = fullType.substring(fullType.lastIndexOf(".") + 1))
    #set(colComment = col.comment ? col.comment : col.name)
    /**
     * #(colComment)
     */
    @Schema(description = "#(colComment)")
    #-- 1. 主键判断 --#
    #if(table.primaryKeys.contains(col.name))
        #if(fullType == "java.lang.Integer" || fullType == "int")
    @Id(keyType = KeyType.Auto)
        #else if(fullType == "java.lang.Long" || fullType == "long")
    @Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
        #else
    @Id(keyType = KeyType.None)
        #end
    #end
    #if(col.nullable == 0)
    @NotNull(message = "#(propName)不能为空")
    #end
    #-- 2. 时间字段审计判断 --#
    #if(propName == "createTime")
    @Column(onInsertValue = "now()")
    #else if(propName == "updateTime")
    @Column(onInsertValue = "now()", onUpdateValue = "now()")
    #end
    private #(simpleType) #(propName);

    #end
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐