将java实体类转为数据库sql

发布时间 2023-08-15 17:44:13作者: 剑道第一仙

 

package com.qr.util;
/**  

* 创建时间:2023年8月15日 下午3:24:23  
* 文件名称:CreateTableSql.java  
* 类说明:  
*/


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

import javax.xml.bind.annotation.XmlElement;

import com.qr.entity.Sffbusdocmain;
import com.qr.entity.Sffdocdetail;
import com.qr.entity.Sffdocsub;
import com.qr.entity.Sffsubbusdocmain;

import com.qr.entity.Book;
public class CreateTableSql { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { createTable(Book.class, null); } public static void createTable(Class obj,String tableName) throws IOException{ Field[] fields = null; fields = obj.getDeclaredFields(); Class annotationType = null; Object 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(); sb.append(column).append(" "); System.out.println(column+","+f.getType()); param = f.getType(); // sb.append(column);//一般第一个是主键 if(param instanceof Integer){ sb.append(" INTEGER "); }else{ sb.append(" VARCHAR(30) ");//根据需要自行修改 } // 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(); sql = sb.substring(0, sql.length()-1)+" );"; // sql = sb.substring(0, sql.length()-1)+" )ENGINE =INNODB DEFAULT CHARSET= utf8;\r\n"; file = new File("WebContent/createTable/createtable.sql"); //文件保存路径与命名 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() ; } }

 

public class Book{
        private String bookname;
        private String bookid;
    }