自己简单写的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. 安装ArchLinux时遇到的部分问题

    目录 一.网络问题 1.安装刚开始时连接wifi 2.安装完桌面后 二.卸载gnome桌面 三.启动桌面(以kde桌面为例) 1.立即启动桌面(start , stop) 2.设置开启自启动 (ena ...

  2. Spring教程检视阅读

    Spring教程检视阅读 地址 可供参考的教程 <菜鸟学 SSH> <Spring Boot 那些事> <初识 Spring Security> <Sprin ...

  3. html5 cavans的小应用

    1.canvas鼠标画线,canvas小方块移动,canvas小方块旋转并缩放 <!doctype html> <html> <head> <meta cha ...

  4. vue之冒泡阻止

    用了Element ui写页面 <el-dropdown-menu slot="dropdown"> <el-dropdown-item> <el-s ...

  5. (转)windows宿主机,ubuntu虚拟机下的上网设置(有线网络和无线网络)

    转自:http://hi.baidu.com/puppywst/item/d9f73734856e2af32684f4e3 虚拟机下ubuntu共享方式上网: 有线网络 在有线网络的条件下,vmwar ...

  6. Python习题集(四)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 如果一个 3 位数 ...

  7. MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)

    网络上有很多MySQL表碎片整理的问题,大多数是通过demo一个表然后参考data free来进行碎片整理,这种方式对myisam引擎或者其他引擎可能有效(本人没有做详细的测试).对Innodb引擎是 ...

  8. dom4j解析xml格式文件实例

    以下给4种常见的xml文件的解析方式的分析对比: DOM  DOM4J  JDOM  SAX Dom解析    在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...

  9. 【转】Java JDBC对应C# ADO连接数据库之区别

    JDBC对应C#连接数据库之区别 之前一直在用java,最近因为找了.NET的工作,开始学习.NET. 今天也是查了好多资料,但是一直没有看到和JDBC之间的对比博文,开始也是一头雾水! 但是功夫不负 ...

  10. 手机抓包HTTPS (Fiddler & Packet Capture)

    手机抓包HTTPS (Fiddler & Packet Capture) 以前写了一个小游戏(消灭病毒)的刷金币小脚本,使用需要获取openid ,就需要抓微信的HTTPS包 一直都是用Fid ...