`

根据java 实体类生成建表语句

阅读更多

根据java 实体类生成建表语句

直接上代码:

package com.sql;


import oa.entity.User;

import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/***
 * 通过java Class 创建 建表语句
 */
public class CreateTable {
    public static Map<String, String> javaProperty2SqlColumnMap = new HashMap<>();

    static {
        javaProperty2SqlColumnMap.put("Integer", "INTEGER");
        javaProperty2SqlColumnMap.put("Short", "tinyint");
        javaProperty2SqlColumnMap.put("Long", "bigint");
        javaProperty2SqlColumnMap.put("BigDecimal", "decimal(19,2)");
        javaProperty2SqlColumnMap.put("Double", "double precision not null");
        javaProperty2SqlColumnMap.put("Float", "float");
        javaProperty2SqlColumnMap.put("Boolean", "bit");
        javaProperty2SqlColumnMap.put("Timestamp", "datetime");
        javaProperty2SqlColumnMap.put("String", "VARCHAR(255)");
    }

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        createTable(User.class, null);
// createTable(Book.class, null);
    }

    public static String createTable(Class obj, String tableName) throws IOException {


        Field[] fields = null;
        fields = obj.getDeclaredFields();
//        Class annotationType = null;
        String param = null;
        String column = null;
//        XmlElement xmlElement = null;
        StringBuilder sb = null;
        sb = new StringBuilder(50);
        if (tableName == null || tableName.equals("")) {
//未传表明默认用类名
            tableName = obj.getName();
            tableName = tableName.substring(tableName.lastIndexOf(".") + 1);
        }
//        sb.append("\r\ndrop table if exists  ").append(tableName).append(";\r\n");
        sb.append("create table ").append(tableName).append(" ( \r\n");
        System.out.println(tableName);
        boolean firstId = true;
        File file = null;
        for (Field f : fields) {
            column = f.getName();
            if (column.equals("serialVersionUID")) {
                continue;
            }
//            sb.append(column).append(" ");
//            System.out.println(column + "," + f.getType());
            param = f.getType().getSimpleName();
            sb.append(column);//一般第一个是主键
            sb.append(" ").append(javaProperty2SqlColumnMap.get(param)).append(" ");
            /*if (param instanceof Integer) {
                sb.append(" INTEGER ");
            } else if (param instanceof Short) {
                sb.append(" tinyint ");
            } else if (param instanceof Long) {
                sb.append(" bigint ");
            } else if (param instanceof BigDecimal) {
                sb.append(" decimal(19,2) ");
            } else if (param instanceof Double) {
                sb.append(" double precision not null ");
            } else if (param instanceof Float) {
                sb.append(" float ");
            } else if (param instanceof Boolean) {
                sb.append(" bit ");
            } else if (param instanceof Timestamp) {
                sb.append(" datetime ");
            } else {
                sb.append("  ");//根据需要自行修改
            }*/
            if (firstId) {//类型转换
                sb.append(" PRIMARY KEY ");
                firstId = false;
            }
            //获取字段中包含fieldMeta的注解
            //2、获取属性上的所有注释
            Annotation[] allAnnotations = f.getAnnotations();
            /*for(Annotation an : allAnnotations){
                sb.append(" COMMIT '");
                xmlElement = (XmlElement)an;
                annotationType = an.annotationType();
                param = ((XmlElement) an).name();
                System.out.println("属性【"+f.getName()+"-----的注释类型有: " + param);
                sb.append(param).append("'");
            }*/
            sb.append(",\n ");
        }
        String sql = null;
        sql = sb.toString();
        //去掉最后一个逗号
        int lastIndex = sql.lastIndexOf(",");
        sql = sql.substring(0, lastIndex) + sql.substring(lastIndex + 1);

        sql = sql.substring(0, sql.length() - 1) + " )ENGINE =INNODB DEFAULT  CHARSET= utf8;\r\n";
        System.out.println("sql :" + sql);

        //复制到剪切板
        WindowUtil.setSysClipboardText(sql);
//        ToastMessage.toast("复制到剪切板",2000, Color.blue);
        return sql;
        /*file = new File("WebContent/createTable/建表.txt");
        if (!file.getParentFile().exists()) {
            if (!file.getParentFile().mkdirs()) {
            }
        }
        if (!file.exists()) {
            file.createNewFile();
        }
        System.out.println("文件路径:"+file.getAbsolutePath());
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true)));
        out.write(sql) ;
        out.flush();
        out.close() ;*/

    }
}

 

 

 

0
0
分享到:
评论

相关推荐

    java实体转mysql建表语句

    为了从Java实体类自动生成MySQL建表语句,开发者可以使用一些工具或库,如`JPA`的`Metamodel`API,或者开源项目如`MyBatis Generator`。这些工具能够解析Java源代码,从中提取实体类信息并生成相应的SQL语句。 4. ...

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具

    Java实现的一个idea插件,用于实体转Mysql、oracle建表语句和json请求体的工具 使用 1、安装 下载发行版,打开idea:settings-&gt;plugins-&gt;intall plugin from disk 2、使用 打开实体类,右键选择ToMysql/ToOracle/To...

    MySQL表自动生成Java实体类

    4. **生成Java代码**: 根据解析到的表结构,自动生成Java实体类。每个字段对应一个Java属性,数据类型需要转换成Java兼容的类型,如`VARCHAR`转`String`,`INT`转`int`等。同时,生成对应的getter和setter方法。 5....

    利用注解,自动生成建表语句&转换查询结果

    本篇将深入探讨如何利用注解来自动化两个关键任务:自动生成建表语句以及转换查询结果。 首先,让我们来看看如何通过注解实现自动生成建表语句。在数据库驱动的应用开发中,我们通常需要根据模型类(Model Class)...

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发...

    JAVA读取Excel,建库建表,并生成java实体

    在Java开发中,有时我们需要处理Excel数据,例如从Excel文件中获取信息来构建数据库表结构,或者根据Excel数据生成对应的Java实体类。这个任务通常在数据导入、导出或者自动化测试场景中出现。下面我们将详细探讨...

    根据Mysql建表语句创建Java实体类工具

    通过使用本工具,用户可以直接输入MySQL的建表语句,工具将自动解析语句中的字段、数据类型,并生成对应的Java实体类代码。这不仅避免了手动编写实体类的繁琐工作,还减少了因人为错误导致的代码问题。 此外,该...

    JAVA通过实体生成数据库表

    在实体类生成数据库表的过程中,反射被用来读取实体类的元数据,如字段名、类型等,然后根据这些信息构建出创建数据库表的SQL语句。 在实际应用中,我们可能使用Hibernate的`Hibernate Tools`或者MyBatis的`MyBatis...

    mysql实体类生成工具

    mysql生成java实体类

    Java根据实体创建Mysql数据库表

    本资源分享的是如何根据Java实体类自动创建MySQL数据库表,下面将详细介绍这一过程。 首先,我们需要一个ORM框架,例如Hibernate或MyBatis。这里以广泛使用的Hibernate为例。Hibernate是一个强大的Java持久化框架,...

    JAVA SQLite 自动生成实体类 源码

    本项目提供的"JAVA SQLite 自动生成实体类 源码"是一个实用工具,它能够帮助开发者自动生成与SQLite数据库表结构对应的Java实体类,从而简化数据操作的代码编写工作。 首先,我们来理解这个工具的工作原理。当...

    sql server数据库表自动转换成java实体类

    给一个表名,自动生成java实体类,方便实用容易上手。前提,表中至少有一条数据。

    sql2entity:MySQL转换成Java实体类的小公举

    因为公司之前使用JPA,先写实体类再生产数据库建表语句,这样会有一个问题,数据建表语句都是没有注释的,对于新来的同事非常不友好,同时在开发中需要看字段意义的时候也并不方便,并且字段的类型和长度都需要显示的...

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件

    Sqlbean是一款通过Java语法生成SQL语句的ORM插件,其理念是弱化在开发阶段对数据库的操作,无需先建表再开发,可直接编写实体类和业务代码,项目启动后自动创建表和维护表结构。内置大量常用方法,支持灵活的条件...

    oracle 表转实体类工具

    "Oracle表转实体类工具"是一种实用的开发辅助软件,它能自动化地将Oracle数据库中的表结构转换为Java实体类代码,极大地提高了开发效率。这个工具能够自动分析表的字段、数据类型,并生成对应的Java属性,同时还能...

    SpringBoot + MybatisPlus 实现实体类转成数据库表结构,可直接运行

    总结,通过SpringBoot和MybatisPlus的结合,我们可以方便地从Java实体类生成数据库表结构,无需手动编写SQL脚本。这种方式对于快速构建原型或者在数据丢失后恢复表结构非常有用。在实际应用中,记得对重要数据进行...

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    3、新增选择实体注解功能,生成实体的时候自动为实体添加额外的注解。 4、弹出对话框界面大小调整。 5、新增数据源添加默认设置。 6、精确匹配在点更多时,已选中的表会在弹出的列表中被勾选中。 7、修复模糊...

    JAVA读取Excel,建库建表,并生成java实体.zip

    这个名为"JAVA读取Excel,建库建表,并生成java实体.zip"的压缩包文件,显然提供了一个完整的解决方案,涵盖了从读取Excel数据到在数据库中创建表,以及根据Excel内容生成Java实体类的全过程。下面我们将详细探讨...

    SpringBoot+JPA+Freemarker 生成动态SQL

    2. **定义实体类**:根据数据库表结构,创建对应的Java实体类,使用JPA的注解(如@Entity, @Table, @Id等)来描述实体与表的对应关系。 3. **配置Repository**:定义一个接口继承自JpaRepository,该接口将自动提供...

Global site tag (gtag.js) - Google Analytics