javabean中需要建大量的实体类,几张表就有几张实体类,有时候感觉很繁琐。
闲余时间写了个类来自动生成实体类。希望后期能自动获得数据库字段和数据类型。
代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
public class EntityFactory {
/**
* 实体类生成工具 输入/输出 路径 将\改成\\ outClass{Classname(int @@@,....)}//Classname为类名
* int 为数据类型 @@@变量名 遵守方法命令规范
*/
private String outpath;// 生成的类所在的目录
private String sentence;// 设置语句 遵守格式 outClass{Classname(int @@@,....)}
public EntityFactory(String outpath, String sentence) {
super();
this.outpath = outpath;
this.sentence = sentence;
}
public EntityFactory() {
}
public String getSentence() {
return sentence;
}
public void setSentence(String sentence) {
this.sentence = sentence;
}
public String getOUTPATH() {
return outpath;
}
public void setOUTPATH(String oUTPATH) {
outpath = oUTPATH;
}
public File makeFile(String name, String type) {
/**
* 生成的文件 名字和后缀名
*/
String path = outpath + name + "." + type;
File outf = new File(path);
if (outf.exists()) {
outf.delete();
} else {
try {
outf.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return outf;
}
public String getClassName(String str) {
/**
* 获得类名
*/
String className = null;
if (str.contains("outClass")) {
int start = str.indexOf("{");
int sp = str.indexOf("(");
className = str.substring(start + 1, sp);
}
return className;
}
public ArrayList<String[]> splitString(String str) {
/**
* 取出关键字 类型 变量名 int @@@
*/
ArrayList<String[]> list = new ArrayList<String[]>();
if (str.contains("outClass")) {
int sp = str.indexOf("(");
int end = str.lastIndexOf(")");
String content = str.substring(sp + 1, end);
String[] info = content.split(",");
for (String s : info) {
String[] detail = s.split(" ");
list.add(detail);
}
}
return list;
}
public String initial(String str) {
/**
* 首字母大写
*/
String s = str.substring(0, 1);
return s.toUpperCase() + str.substring(1);
}
public void writeFile() {
/**
* bw.write("**实体类自动生成"); 写入文件
*/
BufferedWriter bw = null;
try {
File file = makeFile(getClassName(sentence), "java");
bw = new BufferedWriter(new FileWriter(file));
ArrayList<String[]> list = splitString(sentence);
bw.write("public class " + getClassName(sentence) + "{");
bw.newLine();
bw.write("/*****");
bw.newLine();
bw.newLine();
bw.write("**@time"
+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
bw.newLine();
bw.write("****/");
bw.newLine();
for (int i = 0; i < list.size(); i++) {
/**
* 属性private
*/
String[] detail = list.get(i);
bw.write("private\t" + detail[0] + "\t" + detail[1] + " ;");
bw.newLine();
bw.newLine();
}
bw.newLine();
/** 无参数构造方法 **/
bw.write("public\t" + getClassName(sentence) + "() {}");
bw.newLine();
bw.newLine();
/**
* // 有参数构造方法
*/
bw.write("public\t" + getClassName(sentence) + "(");
bw.newLine();
for (int i = 0; i < list.size(); i++) {
String[] detail = list.get(i);
if (i != list.size() - 1) {
bw.write(detail[0] + " " + detail[1] + ",");
} else {
bw.write(detail[0] + " " + detail[1]);
}
}
bw.write(")");
bw.write("{");
for (int i = 0; i < list.size(); i++) {
String[] detail = list.get(i);
bw.write("this." + detail[1] + "=" + detail[1] + ";");
bw.newLine();
}
bw.write("\t}");
bw.newLine();
/**
* // get set方法
*/
for (int i = 0; i < list.size(); i++) {
String[] detail = list.get(i);
bw.newLine();
bw.write("\tpublic\t" + detail[0] + "\t" + "get"
+ initial(detail[1]) + " () {");
bw.newLine();
bw.write("\t" + "return" + "\t" + detail[1] + ";");
bw.newLine();
bw.write("\t}");
bw.newLine();
bw.write("\tpublic\t" + "void\t" + "set" + initial(detail[1])
+ "(" + detail[0] + " " + detail[1] + ") {");
bw.newLine();
bw.write("\t" + "this." + detail[1] + "=" + detail[1] + ";");
bw.newLine();
bw.write("\t}");
bw.newLine();
}
bw.newLine();
bw.newLine();
/**
* // toString 方法
*/
bw.write("public\tString\ttoString () {");
bw.newLine();
bw.write("\t" + "return" + "\t" + "\"" + getClassName(sentence)
+ "[");
for (int i = 0; i < list.size(); i++) {
String[] detail = list.get(i);
if (i == list.size() - 1) {
bw.write(detail[1] + "=" + "\"" + "+" + detail[1] + "+"
+ "\"" + "]" + "\"" + ";");
} else {
bw.write(detail[1] + "=" + "\"" + "+" + detail[1] + "+"
+ "\"" + ",");
}
}
bw.newLine();
bw.write("\t}");
bw.newLine();
bw.newLine();
bw.write("}");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public boolean checkClass() {
boolean boo = true;
if (getClassName(sentence) == null) {
System.out.println("缺少outClass关键字");
boo = false;
}
return boo;
}
public void produceClass() {
Scanner input = new Scanner(System.in);
System.out.println("请输入目标文件夹(格式D:\\\\)");
String pa = input.nextLine();
// ef.setOUTPATH("D:\\");
setOUTPATH(pa);
System.out
.println("请outClass命令 outClass{Classname(int @@@,....)}//Classname为类名* int 为数据类型 @@@变量名");
String classkey = input.nextLine();
// ef.setSentence("outClass{Test(int num1,int num2,String b,String name,String password)}");
setSentence(classkey);
boolean boo = checkClass();
if (boo) {
writeFile();
System.out.println("已经生成" + getClassName(sentence) + ".java"
+ "\t路径" + outpath);
} else {
System.out.println("生成失败!!");
}
}
public static void main(String[] args) {
EntityFactory ef = new EntityFactory();
ef.produceClass();
}
}
分享到:
相关推荐
因此,"C#自动生成实体类"的技术应运而生,它旨在通过自动化过程来减轻开发人员的工作负担。 这个技术的核心在于能够连接到SQL数据库,分析其中的表结构,并自动生成对应的C#实体类。这样的工具或库通常会解析...
在.NET开发环境中,自动生成实体类是一项常见的任务,特别是在基于ORM(对象关系映射)的框架下,如Entity Framework或NHibernate。实体类是数据库表在编程语言中的映射,它们帮助开发者通过对象来操作数据库,减少...
Mybatis自动生成实体类,XML文件
本项目提供的"JAVA SQLite 自动生成实体类 源码"是一个实用工具,它能够帮助开发者自动生成与SQLite数据库表结构对应的Java实体类,从而简化数据操作的代码编写工作。 首先,我们来理解这个工具的工作原理。当...
自动生成实体类的工具可以极大地提高开发效率,减少手动编写代码的时间和出错的可能性。 标题"自动生成实体类工具源代码"指的是一个软件工具,它的主要功能是根据数据库中的数据表自动创建对应的Java(或其他编程...
java ~ mybatis-plus 自动生成实体类 jar
用一个根据数据库表自动生成实体类代码的案例讲解了代码生成器的核心思路,相关博客地址:https://blog.csdn.net/qq_31142553/article/details/93673384。
"mysql自动生成实体类"就是这样一个工具,它能够帮助开发者快速地根据MySQL中的表结构生成对应的Java实体类,极大地减少了手动编写代码的工作量。 生成实体类的主要目的是实现对象关系映射(Object-Relational ...
在Java开发中,Eclipse是一款广泛使用的集成开发环境(IDE),它提供了许多便捷的功能,其中之一就是能够自动生成实体类。实体类通常用于表示数据库中的表,它们是对象关系映射(ORM)框架如Hibernate的基础。这个...
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
通过填写SqlServer连接字符串,可根据数据库的表结构自动生成实体类,这在项目初期开发的时候能为我们省下很多的时间,特别是大型的项目.
本文将详细介绍如何使用MyBatis的代码生成器(Generator)来自动生成实体类,以及相关的配置和使用步骤。 首先,我们需要在项目中配置MyBatis的generator.xml文件。这个文件是MyBatis Generator的配置中心,它包含...
标题中的“多数据库支持、自动生成实体类和SQL语句的工具1.3.3版 最新版”指的是一款能够跨多种数据库系统,并且具备自动创建实体类和SQL语句功能的开发工具的最新版本。这个工具对于软件开发者,尤其是那些处理多样...
为了解决这个问题,存在许多自动化工具,其中一个便是“一个自动生成实体类和SQL语句的工具 1.2.1版”。这个工具的主要目的是提高开发效率,减少手动编写代码的工作量,确保代码的一致性和准确性。 首先,我们来...
标题提到的"mybatis自动生成实体类和配制文件",指的是利用特定的工具或插件来自动化创建MyBatis框架所需的实体类(Entity)和配置文件(主要是Mapper XML文件)。这大大提高了开发效率,减少了手动编写这些重复性...
在.NET开发环境中,自动生成实体类和DAO(Data Access Object)是提高开发效率的重要手段,尤其是在处理大量数据库交互时。这个".net 自动生成实体类、DAO工具"是一个实用的小型工具,能够帮助开发者快速构建数据...