Beetlsql自定义生成entity,mapper,md代码

三个模板文件 

mapper.btl

1package ${package}; 2import org.beetl.sql.core.annotatoin.*; 3import org.beetl.sql.core.db.KeyHolder; 4import org.beetl.sql.core.engine.PageQuery; 5import org.beetl.sql.core.mapper.BaseMapper; 6${imports} 7 8public interface ${className} extends BaseMapper<${entityClass}> { 9 // 10}

md.btl

1<% 2 3var tableAlias = alias==null?"":(alias+".");//如果没有设置alias,则默认为t 4%> 5sample 6=== 7* 注释### 8 9 select ${PS}use("cols")${PE} from ${tableName} ${alias} where ${PS}use("condition")${PE} 10 11cols 12=== 13 <% 14 print("\t"); 15 for(col in cols){ 16 var colName=tableAlias+col+(colLP.last?"":","); 17 print(colName); 18 }%> 19 20 21updateSample 22=== 23 24 <% 25 print("\t"); 26 for(col in cols){ 27 var colName=tableAlias+col; 28 var attr = @nc.getPropertyName(col); 29 print(colName+"="+PS+attr+PE); 30 if(!colLP.last){ 31 print(","); 32 } 33 }%> 34 35 36condition 37=== 38 39 1 = 1 40 <% 41 for(col in cols){ 42 var colName=tableAlias+col; 43 var attr = @nc.getPropertyName(col); 44 %> 45 ${SS}if(!isEmpty(${attr})){${SE} 46 and ${colName}=${PS+attr+PE} 47 ${SS}}${SE} 48 <%}%>

View Code

pojo.btl 

因为我想用lombok 所以使用@Setter ..注解

1package ${package}; 2import lombok.*; 3${imports} 4${implSerializable?"import java.io.Serializable;"} 5 6@Table(name="${catalog}.${table}") 7@Setter 8@Getter 9@NoArgsConstructor 10public class ${className} ${!isEmpty(ext)?"extends "+ext} ${implSerializable?"implements Serializable"} { 11 12 <%for(attr in attrs){ 13 if(!isEmpty(attr.comment)){%> 14 /* 15 *${attr.comment} 16 */ 17 <% }%> 18 private ${attr.type} ${attr.name} ; 19 <%}%> 20 21}

BeetlGenCode.java

1package com.github.tungss.auth; 2 3import org.beetl.sql.core.*; 4import org.beetl.sql.core.db.*; 5import org.beetl.sql.core.kit.*; 6import org.beetl.sql.ext.gen.*; 7 8import java.io.*; 9import java.util.Set; 10 11/** 12 * 生成dao代码. 13 */ 14 15public class BeetlGenCode { 16 // ========数据库配置========= 17 private static String driver = "com.mysql.cj.jdbc.Driver"; 18 private static String url = "jdbc:mysql:///auth?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC"; 19 private static String userName = "root"; 20 private static String password = "123456"; 21 // ========模板的路径, 示例是spring boot的[src/main/resources/beetlsqlTemplate 文件夹]========= 22 private static String templatePath = "/beetlsqlTemplate"; 23 // ========md生成路径 要提前创建========= 24 private static String mdPath = "/sql"; 25 // ========生成实体类所在的包========= 26 private static String pojoPkg = "com.test.entity"; 27 // ========生成mapper类所在的包========= 28 private static String mapperPkg = "com.test.dao"; 29 30 /** 31 * 入口 32 */ 33 public static void main(String[] args) throws Exception { 34 genAll(); 35 } 36 37 public static void genAll() throws Exception { 38 //准备工作 39 ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, userName, password); 40 DBStyle mysql = new MySqlStyle(); 41 SQLLoader loader = new ClasspathLoader(mdPath); 42 UnderlinedNameConversion nc = new UnderlinedNameConversion(); 43 SQLManager sqlManager = new SQLManager(mysql, loader, source, nc, null); 44 45 GenConfig config = new GenConfig(); 46 config.setDisplay(false); 47 config.setPreferBigDecimal(true); 48 49 System.out.println("======生成代码======"); 50 Set<String> tables = sqlManager.getMetaDataManager().allTable(); 51 for (String table : tables) { 52 System.out.printf("%-20s %s\n",table , "生成完毕"); 53 //默认生成实体类的实现 54 sqlManager.genPojoCode(table, pojoPkg, config); 55 //自定义实现 56 genMd(sqlManager, config, table); 57 //自定义实现 58 genMapper(sqlManager, config, table); 59 } 60 System.out.println("=====生成完毕====="); 61 } 62 63 /** 64 * 生成md文件 65 */ 66 public static void genMd(SQLManager sqlManager, GenConfig config, String table) throws IOException { 67 String fileName = StringKit.toLowerCaseFirstOne(sqlManager.getNc().getClassName(table)); 68 if (config.getIgnorePrefix() != null && !config.getIgnorePrefix().trim().equals("")) { 69 fileName = fileName.replaceFirst(StringKit.toLowerCaseFirstOne(config.getIgnorePrefix()), ""); 70 fileName = StringKit.toLowerCaseFirstOne(fileName); 71 } 72 String target = GenKit.getJavaResourcePath() + "/" + mdPath + "/" + fileName + ".md"; 73 TableDesc desc = sqlManager.getMetaDataManager().getTable(table); 74 FileWriter writer = new FileWriter(new File(target)); 75 MDCodeGen mdCodeGen = new MDCodeGen(); 76 mdCodeGen.setMapperTemplate(config.getTemplate(templatePath + "/md.btl")); 77 mdCodeGen.genCode(sqlManager.getBeetl(), desc, sqlManager.getNc(), null, writer); 78 writer.close(); 79 } 80 81 /** 82 * 生成mapper 83 */ 84 public static void genMapper(SQLManager sqlManager, GenConfig config, String table) { 85 MapperCodeGen mapperCodeGen = new MapperCodeGen(mapperPkg); 86 mapperCodeGen.setMapperTemplate(config.getTemplate(templatePath + "/mapper.btl")); 87 mapperCodeGen.genCode(pojoPkg, sqlManager.getNc().getClassName(table), sqlManager.getMetaDataManager().getTable(table), null, false); 88 } 89}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap