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


所有评论(0)