根据实体类生成sql
2022/2/26 19:21:52
本文主要是介绍根据实体类生成sql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package cn.clcoding.cedrusback; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { //实体类所在的package在磁盘上的绝对路径 String packageName = ""; //生成sql的文件夹 String filePath = "d:/create/"; //项目中实体类的路径 String prefix = ""; String className = ""; StringBuffer sqls = new StringBuffer(); //获取包下的所有类名称 List<String> list = getAllClasses(packageName); for (String str : list) { className = prefix + str.substring(0, str.lastIndexOf(".")); String sql = generateSql(className, filePath); sqls.append(sql); } System.out.println(sqls.toString()); StringToSql(sqls.toString(), filePath + "report.sql"); } /** * 根据实体类生成建表语句 * @author * @date 2019年1月14日 * @param className 全类名 * @param filePath 磁盘路径 如 : d:/workspace/ */ public static String generateSql(String className,String filePath){ try { Class<?> clz = Class.forName(className); className = clz.getSimpleName(); Field[] fields = clz.getDeclaredFields(); StringBuffer column = new StringBuffer(); String varchar = " varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,"; for (Field f : fields) { column.append(" \n `"+f.getName()+"`").append(varchar); } StringBuffer sql = new StringBuffer(); sql.append("\n DROP TABLE IF EXISTS `"+className+"`; ") .append(" \n CREATE TABLE `"+className+"` (") .append(" \n `id` int(11) NOT NULL AUTO_INCREMENT,") .append(" \n "+column) .append(" \n PRIMARY KEY (`id`) USING BTREE,") .append("\n INDEX `id`(`id`) USING BTREE") .append(" \n ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci;"); return sql.toString(); } catch (ClassNotFoundException e) { return null; } } /** * 获取包下的所有类名称,获取的结果类似于 XXX.java * @author * @date 2019年1月14日 * @param packageName * @return */ public static List<String> getAllClasses(String packageName){ List<String> classList = new ArrayList<String>(); String className=""; File f = new File(packageName); if(f.exists() && f.isDirectory()){ File[] files = f.listFiles(); for (File file : files) { className = file.getName(); classList.add(className); } return classList; }else{ return null; } } /** * 将string 写入sql文件 * @author * @date 2019年1月14日 * @param str * @param path */ public static void StringToSql(String str,String path){ byte[] sourceByte = str.getBytes(); if(null != sourceByte){ try { File file = new File(path); //文件路径(路径+文件名) if (!file.exists()) { //文件不存在则创建文件,先创建目录 File dir = new File(file.getParent()); dir.mkdirs(); file.createNewFile(); } FileOutputStream outStream = new FileOutputStream(file); //文件输出流用于将数据写入文件 outStream.write(sourceByte); outStream.flush(); outStream.close(); //关闭文件输出流 System.out.println("生成成功"); } catch (Exception e) { e.printStackTrace(); } } } }
这篇关于根据实体类生成sql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?