自己简单写的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实体类的更多相关文章

  1. Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Windows→Dat ...

  2. 在线数据库表(sql语句)生成java实体类工具

    相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设 ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类     简介:实战使用IDE根据Mysql自动生成java pojo实体类                  1.IDEA连接数 ...

  4. PowerDesigner16.5物理数据表生成C#实体类Model

    原文:PowerDesigner16.5物理数据表生成C#实体类Model 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/da454122373/a ...

  5. 【转】PowerDesigner物理数据表生成C#实体类Model

    model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果 ...

  6. mysql逆向生成 java 实体类

    import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.sql.Connecti ...

  7. ABAP表生成Java实体Bean

    项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供分发与查询服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大 ...

  8. myeclipse 从数据库生成java实体类

  9. net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现

    1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...

随机推荐

  1. 将root用户权限赋予普通用户

    将root用户权限赋予普通用户 普通用户想要拥有root用户的权限,必须修改/etc/sudoers文件 ,还必须使用visudo命令修改.一是因为这个命令能防止多个用户同时修改这个文件,二是能进行有 ...

  2. Protocol buffers编写风格指南

    原文链接:https://developers.google.com/protocol-buffers/docs/style Style Guide 本文说明了.proto文件的编写风格指南.遵循这些 ...

  3. 网络|N1盒子做旁路由刷OpenWRT系统(小白专用)

    N1盒子做旁路由刷OpenWRT系统(小白专用) 为什么要用N1盒子 现如今新上市的路由器,市面上能买到的300元以内的路由器大多数都是双频(5G Hz和2.4G Hz)和几年前相比无论是速度还是性能 ...

  4. ajax 瀑布流 demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. [CSP初赛] 组合数学的三个技巧以及从另一方面思考组合类问题

    也不知道老师讲不讲 话说好久没有水博客了,看了一点\(python\)然后就去搞文化课了 正好网课讲到组合数学,然后觉得还蛮难的(其实是我变菜了),就想到了以前的\(csp\)的组合数学基础 果然被我 ...

  6. Salesforce LWC学习(十三) 简单知识总结篇一

    本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 随着项目的学习以及trailhead的学习,会遇见自己曾经模糊的定义或者比较浪 ...

  7. mysql索引查找原理及优化

    常见查找方法 1.顺序查找(linear search ) 1. 最基本的查询算法当然是顺序查找(linear search),也就是对比每个元素的方法,不过这种算法在数据量很大时效率是极低的. 2. ...

  8. 大数据软件安装之ZooKeeper监控

    一.ZooKeeper安装 官方文档: https://zookeeper.apache.org/doc/r3.5.5/zookeeperStarted.html 1.解压分发 [test@hadoo ...

  9. cmdb autoserver端表数据分析

    目录: 1.后台目录规划 autoserver: api: 接收数据并进行二次分析入库 API验证 backend : 负责后台管理 repository:负责管理模型类 (数据表) autoserv ...

  10. 一文带你入门Java Stream流,太强了

    两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:"就想看你写的啊!"你看你看,多么苍白的喜欢啊.那就&qu ...