SpringBoot+Beetlsql代码生成
一,加入beetlsql依赖
<!-- beetl-framework-starter -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl-framework-starter</artifactId>
<version>1.2.24.RELEASE</version>
</dependency>
二.配置
################### beetsql配置 ########################
# 默认是true,即向控制台输出执行时候的sql,参数,执行时间,以及执行的位置,每次修改sql文件的时候,自动检测sql文件修改
beetl-beetlsql:
dev: true
beetlsql:
basePackage: com.sybd.beetlsql.dao
#sql 文件的位置
sqlPath: /beetlsql
daoSuffix: Dao
dbStyle: org.beetl.sql.core.db.MySqlStyle
三.创建模版文件
1.mapper.btl
package ${package};
import org.beetl.sql.core.annotatoin.*;
import org.beetl.sql.core.db.KeyHolder;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.core.mapper.BaseMapper;
${imports}
public interface ${className} extends BaseMapper<${entityClass}> {
}
2.md.btl
<%
var tableAlias = alias==null?"":(alias+".");//如果没有设置alias,则默认为t
%>
sample
===
* 注释###
select ${PS}use("cols")${PE} from ${tableName} ${alias} where ${PS}use("condition")${PE}
cols
===
<%
print("\t");
for(col in cols){
var colName=tableAlias+col+(colLP.last?"":",");
print(colName);
}%>
updateSample
===
<%
print("\t");
for(col in cols){
var colName=tableAlias+col;
var attr = @nc.getPropertyName(col);
print(colName+"="+PS+attr+PE);
if(!colLP.last){
print(",");
}
}%>
condition
===
= 1
<%
for(col in cols){
var colName=tableAlias+col;
var attr = @nc.getPropertyName(col);
%>
${SS}if(!isEmpty(${attr})){${SE}
and ${colName}=${PS+attr+PE}
${SS}}${SE}
<%}%>
3.pojo.btl
package ${package};
import lombok.*;
${imports}
${implSerializable?"import java.io.Serializable;"}
@Table(name="${table}")
@Data
@NoArgsConstructor
public class ${className} ${!isEmpty(ext)?"extends "+ext} ${implSerializable?"implements Serializable"} {
<%for(attr in attrs){
if(!isEmpty(attr.comment)){%>
/**
*${attr.comment}
*/
<% }%>
private ${attr.type} ${attr.name} ;
<%}%>
}
图例

四,测试类生成代码
package com.test.broadcast;
import org.beetl.sql.core.*;
import org.beetl.sql.core.db.DBStyle;
import org.beetl.sql.core.db.MySqlStyle;
import org.beetl.sql.core.db.TableDesc;
import org.beetl.sql.core.kit.GenKit;
import org.beetl.sql.core.kit.StringKit;
import org.beetl.sql.ext.gen.GenConfig;
import org.beetl.sql.ext.gen.MDCodeGen;
import org.beetl.sql.ext.gen.MapperCodeGen;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Set;
/**
* @author
* @version 1.0.0
* @ClassName BeetlSqlTest.java
* @Description TODO
* @createTime 2020年011月24日 19.24
*/
public class BeetlSqlTest {
// ========数据库配置=========
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT";
private static String userName = "root";
private static String password = "123456";
// ========模板的路径, 示例是spring boot的[src/main/resources/beetlsqlTemplate 文件夹]=========
private static String templatePath = "/beetlsqlTemplate";
// ========md生成路径 要提前创建=========
private static String mdPath = "/beetlsql";
// ========生成实体类所在的包=========
private static String pojoPkg = "com.test.broadcast.entity";
// ========生成mapper类所在的包=========
private static String mapperPkg = "com.test.broadcast.dao";
/**
* 入口
*/
public static void main(String[] args) throws Exception {
genAll();
}
public static void genAll() throws Exception {
//准备工作
ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, userName, password);
DBStyle mysql = new MySqlStyle();
SQLLoader loader = new ClasspathLoader(mdPath);
UnderlinedNameConversion nc = new UnderlinedNameConversion();
SQLManager sqlManager = new SQLManager(mysql, loader, source, nc, null);
GenConfig config = new GenConfig();
config.setDisplay(false);
config.setPreferBigDecimal(true);
config.setTemplate(config.getTemplate(templatePath + "/pojo.btl"));
System.out.println("======生成代码======");
Set<String> tables = sqlManager.getMetaDataManager().allTable();
for (String table : tables) {
System.out.printf("%-20s %s\n",table , "生成完毕");
//默认生成实体类的实现
sqlManager.genPojoCode(table, pojoPkg, config);
//自定义实现
genMd(sqlManager, config, table);
//自定义实现
genMapper(sqlManager, config, table);
}
System.out.println("=====生成完毕=====");
}
/**
* 生成md文件
*/
public static void genMd(SQLManager sqlManager, GenConfig config, String table) throws IOException {
String fileName = StringKit.toLowerCaseFirstOne(sqlManager.getNc().getClassName(table));
if (config.getIgnorePrefix() != null && !config.getIgnorePrefix().trim().equals("")) {
fileName = fileName.replaceFirst(StringKit.toLowerCaseFirstOne(config.getIgnorePrefix()), "");
fileName = StringKit.toLowerCaseFirstOne(fileName);
}
String target = GenKit.getJavaResourcePath() + "/" + mdPath + "/" + fileName + ".md";
TableDesc desc = sqlManager.getMetaDataManager().getTable(table);
FileWriter writer = new FileWriter(new File(target));
MDCodeGen mdCodeGen = new MDCodeGen();
mdCodeGen.setMapperTemplate(config.getTemplate(templatePath + "/md.btl"));
mdCodeGen.genCode(sqlManager.getBeetl(), desc, sqlManager.getNc(), null, writer);
writer.close();
}
/**
* 生成dao文件
*/
public static void genMapper(SQLManager sqlManager, GenConfig config, String table) {
MapperCodeGen mapperCodeGen = new MapperCodeGen(mapperPkg);
mapperCodeGen.setMapperTemplate(config.getTemplate(templatePath + "/mapper.btl"));
mapperCodeGen.genCode(pojoPkg, sqlManager.getNc().getClassName(table), sqlManager.getMetaDataManager().getTable(table), null, false);
}
}
注:代码内容参考自作者:蓝莲花;
项目链接地址:Gitee地址:https://gitee.com/edwarder/hospital-project.git

本文介绍了如何在SpringBoot项目中集成BeetlSQL,并配置相关依赖,通过创建模板文件来实现代码的自动化生成,包括Mapper接口、POJO实体类和MD文件。同时提供了一个测试类用于生成代码,简化开发流程。
729

被折叠的 条评论
为什么被折叠?



