
java代码自动生成数据库表中对应的类文件及操作数据库功能
自动化生成:通过工具类即可快速生成Java类文件,减少手动编码工作量。 高效管理:支持事务管理和参数化查询,提高数据库操作效率。 灵活配置:可根据需求配置数据库连接池和生成文件路径。
发布日期:2021-05-16 08:06:02
浏览次数:24
分类:精选文章
本文共 7017 字,大约阅读时间需要 23 分钟。
Java代码自动生成数据库表中对应的类文件及操作数据库功能(工具类)
一、项目背景
在软件开发过程中,常常需要根据数据库表结构自动生成相应的Java类文件,并对数据库进行 CRUD(Create, Read, Update, Delete)操作。手动编写这些代码不仅繁琐,而且容易出现错误。本文将介绍一种基于 JDBC 的工具类,能够自动化完成上述任务。
二、工具类功能概述
1. 创建数据库和数据库表
- 使用 MySQL 数据库创建数据库和表结构。
- 建议使用 InnoDB 存储引擎。
2. 导入依赖库
- MySQL JDBC 驱动:
mysql-connector-java-5.1.47.jar
- c3p0 连接池:
c3p0-0.9.5.1.jar
- 可选:
mchange-commons-java-0.2.10.jar
3. 工具类配置
- 配置数据库连接池信息,通过 XML 文件完成数据库配置。
- 确保数据库驱动加载正确。
4. 工具类功能
1. 自动生成数据库表对应的Java类文件
autoGenerateAllBean(String url)
:根据指定路径生成所有数据库表对应的Java类文件。autoGenerateFormatBean(String table, String url)
:根据指定表名生成对应的Java类文件。
2. 数据查询功能
dql(String sql, Class<E> c, Object... obj)
:执行数据查询,返回结果集合。- 支持参数化查询,通过
?
占位符传递参数值。
3. 数据操作功能
dml(Connection con, String sql, Object... obj)
:执行数据操作(插入、更新、删除),支持事务管理。dml(String sql, Object... obj)
:不支持事务的数据操作方法。
三、工具类核心实现
1. 连接池配置
ComboPooledDataSource dpds = new ComboPooledDataSource();try { dpds.setDriverClassName("com.mysql.jdbc.Driver"); // 读取数据库配置文件 dpds.setDataSourceClassName("com.mchange.v2.c3p0 ComboPooledDataSource"); dpds.setProperty("driverClassName", "com.mysql.jdbc.Driver"); dpds.setProperty("databaseUrl", "jdbc:mysql://localhost:3306/test"); dpds.setProperty("username", "root"); dpds.setProperty("password", "root");} catch (Exception e) { e.printStackTrace();}
2. Java类自动生成
public class MyJDBCutil { private static ComboPooledDataSource dpds; static { dpds = new ComboPooledDataSource(); } public static Connection getCon() { Connection con = null; try { con = dpds.getConnection(); } catch (Exception e) { e.printStackTrace(); } return con; } // 生成Java类文件 public static void autoGenerateAllBean(String url) { Connection con = getCon(); try { Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery("select * from test"); while (rs.next()) { autoGenerateFormatBean(rs.getString(1), url); } rs.close(); statement.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } // 生成单个Java类文件 public static void autoGenerateFormatBean(String table, String url) { Connection con = getCon(); try { Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery("select * from " + table); while (rs.next()) { String className = table.substring(1).replace(".", ""); File file = new File(new File(url), className + ".java"); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("package " + url + ";"); bw.newLine(); // 写入字段信息 HashMapnames = new HashMap<>(); ArrayList nameList = new ArrayList<>(); ResultSetMetaData meta = rs.getMetaData(); for (int i = 0; i < meta.getColumnCount(); i++) { String columnLabel = meta.getColumnLabel(i + 1); String columnTypeName = meta.getColumnTypeName(i + 1); names.put(columnLabel, dbTOJava(columnTypeName)); nameList.add(columnLabel); } // 写入类体 bw.write("public class " + className + " {"); bw.newLine(); // 写入字段 for (String key : nameList) { String value = names.get(key); bw.write(" private " + value + " " + key + ";"); bw.newLine(); } bw.newLine(); // 写入无参构造函数 bw.write(" public " + className + "() {"); bw.newLine(); bw.write(" super();"); bw.newLine(); bw.write(" }"); bw.newLine(); // 写入全参构造函数 bw.write(" public " + className + "("); for (int i = 0; i < nameList.size(); i++) { String key = nameList.get(i); if (i != nameList.size() - 1) { bw.write(names.get(key) + " " + key + ","); } else { bw.write(names.get(key) + " " + key); } } bw.write(") {"); bw.newLine(); for (String key : nameList) { bw.write(" this." + key + " = " + key + ";"); bw.newLine(); } bw.write(" }"); bw.newLine(); // 写入 getter 和 setter 方法 for (String key : nameList) { String value = names.get(key); bw.write(" public " + value + " get" + key.toUpperCase().charAt(0) + key.substring(1) + "() {"); bw.newLine(); bw.write(" return this." + key + ";"); bw.newLine(); bw.write(" }"); bw.newLine(); bw.write(" public void set" + key.toUpperCase().charAt(0) + key.substring(1) + "(" + value + " " + key + ") {"); bw.newLine(); bw.write(" this." + key + " = " + key + ";"); bw.newLine(); bw.write(" }"); bw.newLine(); } // 写入 toString 方法 bw.write(" @Override"); bw.newLine(); bw.write(" public String toString() {"); bw.newLine(); bw.write(" return \"" + className + " " + nameList.toString() + "\";"); bw.newLine(); bw.write(" }"); bw.write("}"); bw.flush(); bw.close(); } rs.close(); statement.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } // 数据库类型转换 private static String dbTOJava(String type) { if (type.equals("INT")) { return "int"; } else if (type.equals("VARCHAR") || type.equals("CHAR")) { return "String"; } else if (type.equals("DOUBLE")) { return "double"; } else if (type.equals("FLOAT")) { return "float"; } else if (type.equals("TIMESTAMP") || type.equals("DATETIME") || type.equals("DATE") || type.equals("TIME")) { return "Timestamp"; } else { return "Object"; } }}
3. 使用说明
- 调用
autoGenerateAllBean(String url)
,将url
参数设置为生成Java类文件的路径。 - 调用
autoGenerateFormatBean(String table, String url)
,指定数据库表名和生成文件路径。 - 数据查询方法
dql(String sql, Class<E> c, Object... obj)
,支持参数化查询。 - 数据操作方法
dml(Connection con, String sql, Object... obj)
,支持事务管理。
四、工具类优势
通过以上工具类,可以快速完成数据库表结构与Java类文件的映射,并对数据库进行基本操作,简化开发流程。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月01日 22时37分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mybatis+springboot+MySQL批量插入 1w 条数据
2025-04-14
MyBatis 注解和Provider注解(动态构建SQL)使用
2025-04-14
mybatis
2025-04-14
mybaits的批量修改以及其中的坑
2025-04-14
Mybaits源码分析
2025-04-14
Mobx 结合 TypeScript 实现 setState 类型推导
2025-04-14
MybaisPlus中#{} 和${}的区别---SpringCloud工作笔记187
2025-04-14
MyAdapter代码复用工具类
2025-04-14
Mock 工具使用:弱网测试
2025-04-14
Mock+Proxy在SDK项目的自己主动化測试实战
2025-04-14
Mock.js 的语法规范
2025-04-14
Mock.js 的语法规范学习
2025-04-14
my97日期控件插件的开发与编写
2025-04-14
mockcpp & testngpp在2010.7~11月的改进
2025-04-14
Mock在接口测试中的实际应用
2025-04-14
mock异常
2025-04-14
Mock技术在JAVA微服务单元测试中的应用
2025-04-14
Mock模拟测试实战
2025-04-14
Mock模拟测试框架详解
2025-04-14