Beetlsql自定义生成entity,mapper,md代码
三个模板文件
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}> {
//
}
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 = 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}
<%}%>
pojo.btl
因为我想用lombok 所以使用@Setter ..注解
package ${package};
import lombok.*;
${imports}
${implSerializable?"import java.io.Serializable;"} @Table(name="${catalog}.${table}")
@Setter
@Getter
@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} ;
<%}%> }
BeetlGenCode.java
package com.github.tungss.auth; import org.beetl.sql.core.*;
import org.beetl.sql.core.db.*;
import org.beetl.sql.core.kit.*;
import org.beetl.sql.ext.gen.*; import java.io.*;
import java.util.Set; /**
* 生成dao代码.
*/ public class BeetlGenCode {
// ========数据库配置=========
private static String driver = "com.mysql.cj.jdbc.Driver";
private static String url = "jdbc:mysql:///auth?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC";
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 = "/sql";
// ========生成实体类所在的包=========
private static String pojoPkg = "com.test.entity";
// ========生成mapper类所在的包=========
private static String mapperPkg = "com.test.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); 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();
} /**
* 生成mapper
*/
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);
}
}
Beetlsql自定义生成entity,mapper,md代码的更多相关文章
- java自动生成entity文件
网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...
- vs2017 自定义生成规则 错误 MSB3721 命令 ”已退出,返回代码为 1。
错误 MSB3721 命令 ”已退出,返回代码为 1. 解决办法:去掉yasm复选框,改为masm vs2017 自定义生成规则-编译汇编代码 VC++调用yasm编译汇编代码有三种方法:Custom ...
- SpringBoot--Easycode、mybatisX插件生成entity,controller,service,dao,mapper IDEA版 项目提效神器
一.介绍 Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大. MybatisX 是一款基于 ...
- MyBatis Generator 自定义生成注释
注释生成器 为了生成db里面的注释,必须自定义注释生成器 EmptyCommentGenerator: import org.mybatis.generator.api.CommentGenerato ...
- [springboot 开发单体web shop] 2. Mybatis Generator 生成common mapper
Mybatis Generator tool 在我们开启一个新项目的研发后,通常要编写很多的entity/pojo/dto/mapper/dao..., 大多研发兄弟们都会抱怨,为什么我要重复写CRU ...
- mybatis15 mapper方式 代码
UserMapper.java package cn.itcast.mybatis.mapper; import java.util.List; import cn.itcast.mybatis.po ...
- 基于虎书实现LALR(1)分析并生成GLSL编译器前端代码(C#)
基于虎书实现LALR(1)分析并生成GLSL编译器前端代码(C#) 为了完美解析GLSL源码,获取其中的信息(都有哪些in/out/uniform等),我决定做个GLSL编译器的前端(以后简称编译器或 ...
- MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子
什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
随机推荐
- Class 'SoapClient' not found 解决方法
Class 'SoapClient' not found ? 在百度上搜了解决办法,可是收效不佳,只知道好像要添加soap扩展模块,但怎么添加却没有说.于是,我上了google.果然,查看一些英文资料 ...
- 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建
引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...
- BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2530 So ...
- test20181015 B 君的第三题
题意 B 君的第三题(zhengzhou) 题目描述 让你在战争和耻辱中做一块选择,你选择耻辱,可你将来还得进行战争. 在平面上有n 个整点(横纵坐标都是整数) B 君想找到一个整点,使得这个点,到所 ...
- (考研)PV操作和信号量
就绪:除了CPU其他都行了 进程的阻塞:进程因等待某事件(如等待I/O设备,等待临街资源)而暂时不能运行的状态,此时即使处理机空闲,进程也无法使用. ************************* ...
- Android中关于JNI 的学习(一)对于JNIEnv的一些认识
一个简单的样例让我们初步地了解JNI的作用.可是关于JNI中的一些概念还是需要了解清楚,才干够更好的去利用它来实现我们想要做的事情. 那么C++和Java之间的是怎样通过JNI来进行互相调用的呢? 我 ...
- 动态库中的soname
soname( Short for shared object name) 其是应用程序加载dll 时候,其寻找共享库用的文件名.其格式为 lib + math+.so + ( major versi ...
- odoo 数据库选择的随笔
odoo 数据库选择的随笔 看到有人讨论 odoo 是否可以使用 SQL Server(MS SQL). 原来 odoo 使用的是 PostgreSQL,PostgreSQL 是很先进的关系性数据库, ...
- dell R730 安装windwos 2008 R2在windows loading files...完成后屏幕无信号(iDrac绿屏)
dell R730 安装windwos 2008 R2在windows loading files...完成后,Starting Windows时屏幕无信号(iDrac绿屏) 解决方法: F2 进行 ...
- git源站安装
##下载源站 wget https://www.kernel.org/pub/software/scm/git/git-2.15.0.tar.xz ##安装依赖组件 yum install curl- ...