JDBCUtils,根据当前MySQL数据库下面的表生成java实体类
自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵。
初始化配置:
//驱动程序名//不固定,根据驱动
static String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名******,8.0jar包新增时区。
static String url = "jdbc:mysql://localhost/你的数据库名?serverTimezone=GMT%2B8";
// MySQL配置时的用户名
static String user = "你的帐号";
// Java连接MySQL配置时的密码******
static String password = "你的密码"; private static String[] colnames; // 列名数组 private static String[] colTypes; // 列名类型数组 private static String[] upperColnames; //驼峰命名的字段 private static List<StringBuffer> listArr=new ArrayList<StringBuffer>(); //存储最终的数据 static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
打开与关闭数据库连接:
public static Connection mySQLOpen() {
Connection con = null;
try {
con = DriverManager.getConnection(url, user, password);
System.out.println("succeed to connection mysql!");
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void mySQLClose(ResultSet rs, Statement st, Connection con) {
try {
try {
if (rs != null) {
rs.close();
}
} finally {
try {
if (st != null) {
st.close();
}
} finally {
if (con != null)
con.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
获得当前数据库下的所有表名:
/**
* 获得当前数据库生成数据库下所有的表名
* @author one
*
* */
public static List<String> getTableFromNowConnectDB(){
Connection conn=null;
DatabaseMetaData dbmd = null;
List<String> list = null;
try {
conn=mySQLOpen();
dbmd=(DatabaseMetaData) conn.getMetaData();
//conn.getCatalog():获得当前目录
ResultSet rs = dbmd.getTables(conn.getCatalog(), "%", "%", new String[] { "TABLE" });
if (rs != null) {
list = new ArrayList<String>();
}
while(rs.next()){
//System.out.println(rs.getString("TABLE_NAME"));
list.add(rs.getString("TABLE_NAME"));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
生成每个表名的所有字段:
/**
* 生成所有的字段
*
* @param sb,把stringbuffer 对象传进来继续append
* @return
*/
private static void processAllField(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + colTypes[i] + " " + colnames[i] + ";\r\n");
}
}
生成每个表名的set(),get()访问器:
/**
* 生成所有的set(),get()
*
* @param sb,把stringbuffer 对象传进来继续append
*/
private static void processAllMethod(StringBuffer sb) {
for (int i = 0; i < colnames.length; i++) {
sb.append("\tpublic void set" + upperColnames[i] + "(" + colTypes[i] + " " + colnames[i] + "){\r\n");
sb.append("\t\tthis." + colnames[i] + " = " + colnames[i] + ";\r\n");
sb.append("\t}\r\n"); sb.append("\tpublic " + colTypes[i] + " get" + upperColnames[i] + "(){\r\n");
sb.append("\t\treturn this." + colnames[i] + ";\r\n");
sb.append("\t}\r\n");
}
}
生成每个表名的构造函数:
/**
* @author one
* 该方法用于生成构造函数
* @param sb,把stringbuffer 对象传进来继续append
* @see 默认生成一个无参数构造和带全部参数构造
*
* public UserInfo(){}
public UserInfo(int uid, String uname, String usex) {
super();
this.uid = uid;
this.uname = uname;
this.usex = usex;
}
* */
private static void processConstructor(StringBuffer sb,String tableName) {
sb.append("\tpublic "+tableName+"(){}\r\n");
sb.append("\tpublic "+tableName+"(");
String link="";
for (int i = 0; i < colnames.length; i++) {
sb.append(link + colTypes[i] + " " + colnames[i]);
link=",";
}
sb.append("){\r\n");
for (int i = 0; i < colnames.length; i++) {
sb.append("\t\tthis."+colnames[i]+"="+colnames[i]+";\r\n");
}
sb.append("\t}\r\n");
}
数据类型转换的方法:
/**
* 该方法用于类型转换
* @param dbType:传入的数据类型
* @author one
* */
private static String sqlTypeToJava(String dbType) {
dbType = dbType.toUpperCase();
switch (dbType) {
case "VARCHAR":
case "VARCHAR2":
case "CHAR":
return "String";
case "NUMBER":
case "DECIMAL":
return "double";
case "INT":
case "SMALLINT":
case "INTEGER":
return "int";
case "BIGINT":
return "int";
case "DATETIME":
case "TIMESTAMP":
case "DATE":
return "Date";
default:
return "Object";
}
}
创建文件夹,写入项目:
/**
* 创建java 文件 将生成的属性 get/set 方法 保存到 文件中
*
* @author one
* @param className
* 类名称
* @param content
* 类内容 包括属性 getset 方法
*/
public static void createFloder(String className, String content, String packageName) {
String folder = System.getProperty("user.dir") + "/src/" + packageName + "/"; File file = new File(folder);
if (!file.exists()) {
file.mkdirs();
}
String fileName = folder + className + ".java"; try {
File newdao = new File(fileName);
FileWriter fw = new FileWriter(newdao);
fw.write("package\t" + packageName.replace("/", ".") + ";\r\n");
fw.write(content);
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
生成实体类:
/**
* 该方法生成Entity
* @param tablename:表名集合
* @param packname:要生成的路径
* @author one
* */
public static List<StringBuffer> createEntity(List<String> tableNames,String packname) throws Exception{
Connection conn=null;
PreparedStatement pstmt=null;
ResultSetMetaData rsmd = null;
//每个表的表名
String eveTableName="";
conn=mySQLOpen(); //System.out.println("当前数据库下的表的总数:"+tableNames.size());
for (int i = 0; i < tableNames.size(); i++) {
//用StringBuffer的形式先输出测试一下
StringBuffer sb=new StringBuffer("");
//表名首字母转大写
eveTableName=tableNames.get(i).substring(0, 1).toUpperCase()+tableNames.get(i).substring(1,tableNames.get(i).length());
sb.append("public class "+eveTableName+" {\n\n");
//查询语句
String sql="select * from "+eveTableName; pstmt=conn.prepareStatement(sql);
//获得表的元数据
rsmd=pstmt.getMetaData();
// 每个表共有多少列
int size = rsmd.getColumnCount();
//把字段放在集合里面
colnames = new String[size];
colTypes = new String[size];
upperColnames = new String[size]; for (int j = 0; j < size; j++) {
String columnName = rsmd.getColumnName(j+1);//每列的字段名
colnames[j]=columnName;
String colunmType=sqlTypeToJava(rsmd.getColumnTypeName(j+1));//每列的类型
colTypes[j]=colunmType;
//接下来做驼峰命名的字段
String upperColumnNam= rsmd.getColumnName(j+1).substring(0,1).toUpperCase()+
rsmd.getColumnName(j+1).substring(1,rsmd.getColumnName(j+1).length());
upperColnames[j]=upperColumnNam;
}
processAllField(sb); //生成字段
processAllMethod(sb); //生成set,get方法
processConstructor(sb,eveTableName); //生成构造函数
//添加最后一个括号
sb.append("}");
//创建文件夹,sb.toString(),把数据加进去
createFloder(eveTableName,sb.toString(),packname);
listArr.add(sb);
}
//关闭连接
mySQLClose(null,pstmt,conn);
return listArr;
}
展示数据的方法:
/**
* 展示
* */
public static void goCreate(){
try {
List<StringBuffer> result=createEntity(getTableFromNowConnectDB(),"vo2");
for (int i = 0; i < result.size(); i++) {
System.out.println("============第"+(i+1)+"个表的实体类生成============");
System.out.println(result.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
效果如下:

文件夹创建效果:

JDBCUtils,根据当前MySQL数据库下面的表生成java实体类的更多相关文章
- Mysql逆向工程效率神器之使用IDE自动生成Java实体类
Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...
- 在线数据库表(sql语句)生成java实体类工具
相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数 ...
- PowerDesigner16.5物理数据表生成C#实体类Model
原文:PowerDesigner16.5物理数据表生成C#实体类Model 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/da454122373/a ...
- 【转】PowerDesigner物理数据表生成C#实体类Model
model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果 ...
- mysql逆向生成 java 实体类
import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.sql.Connecti ...
- ABAP表生成Java实体Bean
项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供分发与查询服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大 ...
- myeclipse 从数据库生成java实体类
- net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现
1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...
随机推荐
- Azure CLI 简单入门
Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...
- Java Grammar(二):运算符
运算符简介 计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符. 从运算的元素的个数来区分, ...
- js获得用户网络状况API
js获得用户网络状况API 这是一个实验中的功能,目前还有许多浏览器不兼容此功能某些浏览器尚在开发中 1. 网络类型 effectiveType: 可以得到2g,3g,4g connectionInf ...
- 《Java8 Stream编码实战》正式推出
当我第一次在项目代码中看到Stream流的时候,心里不由得骂了一句"傻X"炫什么技.当我开始尝试在代码中使用Stream时,不由得感叹真香. 记得以前有朋友聊天说,他在代码中用了 ...
- 计算机网络 Computer Networks 期末复习总提纲
平时不学习,期末火葬场. 一周时间靠王道考研和各路 pdf 自学计网,留下的提纲都在这里了.全是干货.全文 pdf 可以在这里下载:http://cloud.billc.io/s/xNHarppQPG ...
- C#中无边框窗体拖动
//定义一个bool变量标识是否拖动窗体 private bool isMove = false; //记录鼠标的位置 private Point point; 定义的变量 /// <summa ...
- File的获取功能(新手)
//导入包.import java.io.File;/*File的获取功能*///创建的一个类.public class zylx2 { //公共静态的主方法. public static void ...
- Java-正则表达式(新手)
/* 正则表达式也是一个字符串,用来定义匹配规则,在Pattern类中有简单的规则定义.可以结合字符串类的方法使用. *///创建的一个类.public class LianxiFF1 { //公共静 ...
- 2. weddriver的定位方法
一. find_element_by_****的方式 首页在网页上鼠标右键选择检查并点击,查看需要定位的元素. https://www.baidu.com 以百度为例 导入模块的: from sel ...
- SQLServer——MASTER..spt_values
常常见到这个表,人家用得天花乱坠的. 自己select一看却莫名其妙的. 如上, 这个表主要用来保存一些枚举值, 据说是从sybase继承过来,许多函数和存储过程可以看到它的身影.也可以叫系统常量表吧 ...