从mysql数据库生成javabean

面对数百张数据库表,手动创建JavaBean效率低下。通过编写程序实现自动化:使用`show TABLES`获取所有表名,`desc 表名`获取表结构。制定规则将表名转化为类名,列类型转化为Bean属性类型,如:表ecs_account_log转换为类EcsAccountLog,不同列类型对应不同的Java类型。
摘要由CSDN通过智能技术生成

需求

现有数据库有几百张表,需要将表对应的JavaBean写完。由于表数量太多,一个一个写太浪费时间,所以写了个批量导入的程序。

解决思路

1、mysql
使用show TABLES;获取所有的表名
这里写图片描述

使用desc 表名;获取相应表的结构
这里写图片描述

2、生成javabean规则
(1)表名 到 类名:首字母大写,”_”去掉且后面的字母大写
例如:表ecs_account_log对应为EcsAccountLog
(2)列类型 到 Bean属性类型
列包含”int”对应为”Integer”
列包含”char”、”text”对应为”String”
列包含”time”、”date”对应为”Date”
列包含”float”、”decimal”对应为”Double”
列其他的对应为”Unknow” 方便找到漏掉的列类型

代码

package common.database;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MysqlToBeans {
    static String driver = "com.mysql.jdbc.Driver";
    static String url = "jdbc:mysql://localhost:3306/gyxshop?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true";
    static String user = "root";
    static String password = "111111";

    static StringBuffer sb = new StringBuffer();

    private static Statement stmt = null;
    private static Connection conn = null;
    private static OutputStreamWriter osw = null;
    private static BufferedWriter bw = null;
    private static FileOutputStream fos = null;

    private static void writeData(String message, String className) {
        String file = "D:\\javabeans\\" + className + ".java";
        try {
            fos = new FileOutputStream(file);
            osw = new OutputStreamWriter(fos);
            bw = new BufferedWriter(osw);
            bw.write(message);
            bw.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    // 根据表名查到字段 名称类型
    public static void getTableDetatils(String tablename, String jbname) {
        ResultSet rs = null;
        try {
            conn = DriverManager.getConnection(url, user, password);
            // 执行sql语句
            stmt = conn.createStatement();
            rs = stmt.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直以来把数据库换成Entity或DTO都是一件让人头痛的事情,既浪费时间又很繁琐,看着几十上百个的几百上千个字段,真是一件让人很头痛的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除前缀,并支持去除多个前缀,支持精确指定只生成哪几个Bean,也支持模糊查找生成哪几个Bean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有备注了! 更重要的是所有的配置都能被保存到本地,只要配置过一次,下次使用只要点一下生成JavaBean,下一秒就能拿到你想要的JavaBean了,完全实现秒生成。并且集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆。 第10版更新震撼发布,效率大提升,功能更加强大,速度过来围观,这次版本更新如下: 1、新增数据库连接池并可以手动配置,提升数据库连接的使用效率。 2、新增多线程并发处理并可以手动配置,大大提升数据收集和文件生成的效率。 3、增强字符串格式化工具,使得自动拼接字符串的应用场景更多。 4、测试数据库连接、生成Bean文件、精确匹配的更多等按钮都使用了异步线程进行处理, 这样界面不再会被卡住了,点了这些按钮以后还可以同时对界面进行其他操作, 如:移动、最小化、设置参数、使用集成工具等。 5、生成Bean文件按钮添加计时功能,当点击该按钮以后,按钮上的文字会变为读秒计时, 这样就不会以为程序卡死了。 6、更新Oracle的数据库驱动包,提升了数据库连接和查询的速度。 7、更新MySQL数据库驱动包。 8、其他一些小Bug的修改和代码优化调整。
可以通过Java代码自动创建数据库。具体实现方式是通过JavaBean的属性来生成字段,然后根据JavaBean的类名来生成名。以下是一个示例代码: ```java import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class CreateTable { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; String className = "com.example.User"; Connection conn = null; Statement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, password); stmt = conn.createStatement(); // 获取JavaBean的属性信息 BeanInfo beanInfo = Introspector.getBeanInfo(Class.forName(className)); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); // 生成SQL语句 StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE "); sb.append(className.substring(className.lastIndexOf(".") + 1)); sb.append(" ("); for (PropertyDescriptor pd : pds) { String name = pd.getName(); if (!name.equals("class")) { sb.append(name).append(" VARCHAR(50),"); } } sb.deleteCharAt(sb.length() - 1); sb.append(")"); // 执行SQL语句 stmt.executeUpdate(sb.toString()); System.out.println("创建成功!"); } catch (ClassNotFoundException | SQLException | IntrospectionException e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 这段代码通过Java的反射机制获取JavaBean的属性信息,然后生成对应的SQL语句,并执行该语句创建。需要注意的是,该代码只是一个示例,实际应用中需要根据具体情况进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值