java自动生成pojo

简介: 自动生成pojo

image.png

importcom.intellij.database.model.DasTable

importcom.intellij.database.util.Case

importcom.intellij.database.util.DasUtil

importjava.io.*

importjava.text.SimpleDateFormat

importcom.intellij.database.model.ObjectKind


/*

* Available context bindings:

* SELECTION Iterable<DasObject>

* PROJECT project

* FILES files helper

*/


packageName="com.cscec;"

typeMapping= [

(~/(?i)tinyint|smallint|mediumint/) :"Integer",

(~/(?i)int/) :"Integer",

(~/(?i)bool|bit/) :"Boolean",

(~/(?i)float|double|real/) :"Double",

(~/(?i)decimal/) :"BigDecimal",

(~/(?i)datetime|timestamp|date|time/) :"Date",

(~/(?i)blob|binary|bfile|clob|raw|image/):"InputStream",

(~/(?i)number/) :"Integer",

(~/(?i)/) :"String"

]


FILES.chooseDirectoryAndSave("Choose directory","Choose where to store generated files"){dir->

SELECTION.filter{itinstanceofDasTable}.each{generate(it, dir)}

}


defgenerate(table, dir) {

defclassName= javaName(table.getName(),true)

deffields= calcFields(table)

packageName= getPackageName(dir)

newFile(dir,className+".java").withPrintWriter("utf-8"){out->generate(out,className,fields, table)}

}


//获取包所在文件夹路径

defgetPackageName(dir) {

returndir.toString().replaceAll("\\\\",".").replaceAll("/",".").replaceAll("^.*src(\\.main\\.java\\.)?","") +";"

}


defgenerate(out, className, fields, table) {

out.println"package$packageName"

out.println""

// out.println "import com.baomidou.mybatisplus.annotation.TableField;"

out.println"import io.swagger.annotations.ApiModelProperty;"

out.println"import com.baomidou.mybatisplus.annotation.TableId;"

out.println"import com.baomidou.mybatisplus.annotation.TableName;"

out.println"import lombok.Data;"


Set types=newHashSet()

fields.each(){

types.add(it.type)

}

if(types.contains("Date")) {

out.println""

out.println"import java.util.Date;"

}

if(types.contains("InputStream")) {

out.println"import java.io.InputStream;"

}


out.println""

out.println"/**"

out.println" * @author zhangkepeng"

out.println" * @date "+newSimpleDateFormat("yyyy-MM-dd").format(newDate())

out.println" */"

out.println"@Data"

out.println"@TableName(\""+ table.getName() +"\")"

out.println"public class$className{"

out.println""

fields.each(){

//输出注释

if(isNotEmpty(it.commoent)) {

out.println"\t/**"

out.println"\t*${it.commoent.toString()}"

out.println"\t*/"

}


if(it.annos !="") out.println"${it.annos}"

out.println"\tprivate${it.type}${it.name};"

}

out.println""

out.println"}"

}


defisNotEmpty(content) {

returncontent !=null&& content.toString().trim().length() >0

}


defcalcFields(table) {

DasUtil.getColumns(table).reduce([]){fields, col->

defspec= Case.LOWER.apply(col.getDataType().getSpecification())

deftypeStr=typeMapping.find{p, t->p.matcher(spec).find()}.value


defcomm= [

colName: col.getName(),

name: javaName(col.getName(),false),

type:typeStr,

commoent: col.getComment(),

// annos : "\t@TableField(\""+col.getName()+"\" )"

annos:"\t@ApiModelProperty(\""+col.getComment()+"\")"

]

if("id".equals(Case.LOWER.apply(col.getName())))

comm.annos="\t@TableId(value =\"id\")"

fields += [comm]

}

}


defjavaName(str, capitalize) {

defs= com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)

.collect{Case.LOWER.apply(it).capitalize()}

.join("")

.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/,"_")

capitalize ||s.length() ==1?s: Case.LOWER.apply(s[0]) +s[1..-1]

}




相关文章
|
Java 数据库连接
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
80 0
|
Java 测试技术 开发工具
Java单元测试之IDEA自动生成测试类
每次对类的方法进行测试,都是手动创建一个Test测试类,然后编写同名的方法,每次这样都会很繁琐,IDEA开发工具提供了自动生成测试类的插件JUnitGenerator,接下来介绍该插件的安装与使用。
3254 0
Java单元测试之IDEA自动生成测试类
|
6月前
|
存储 前端开发 Java
Java:PO、VO、BO、DO、DAO、DTO、POJO
Java:PO、VO、BO、DO、DAO、DTO、POJO
148 0
|
6月前
|
Java 流计算
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
【2月更文挑战第6天】在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
85 3
|
Java 数据库 数据安全/隐私保护
【java】个人项目:中小学数学卷子自动生成程序
【java】个人项目:中小学数学卷子自动生成程序
|
设计模式 Java
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
java自动生成类热加载(注册和扫描)
|
设计模式 前端开发 Java
Java开发中PO、VO、DAO、BO、DTO、POJO 含义
可以看成是与数据库中的表相映射的java对象。使用 Mybatis 来生成 PO 是不错的选择。
372 0
|
开发框架 JavaScript 前端开发
HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)
JS FA(Feature Ability)调用PA (Particle Ability)是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制,用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道。开发者可以使用FA调用PA机制进行应用开发,但直接使用该机制需要开发者手动撰写大量模板代码,且模板代码可能与业务代码相互耦合,使得代码可维护性和可读性较差。
|
Java 测试技术 API
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
175 0
|
设计模式 存储 开发框架
Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
550 0