java 数据库表反向生成相应的java类,同时完成了字段和表名中包含下划线的情况。
package cn.tongkuan.common;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class TableToJavaBean {
private static final String LINE = "\r\n";
private static final String TAB = "\t";
String packages = this.getClass().getPackage().getName().replace("common", "model");;
private static Map<String, String> map;
static {
map = new HashMap<String, String>();
map.put("VARCHAR", "String");
map.put("INTEGER", "Integer");
map.put("FLOAT", "float");
map.put("TIMESTAMP", "Date");
map.put("CHAR", "String");
map.put("DATETIME", "Date");
map.put("TIMESTAMP_IMPORT", "import java.util.Date");
map.put("DATETIME_IMPORT","import java.util.Date");
}
public static String getPojoType(String dataType) {
StringTokenizer st = new StringTokenizer(dataType);
return map.get(st.nextToken());
}
public static String getImport(String dataType) {
if (map.get(dataType)==null||"".equals(map.get(dataType))) {
return null;
}else{
return map.get(dataType);
}
}
public void tableToBean(Connection connection, String tableName) throws SQLException {
String sql = "select * from " + tableName + " where 1 <> 1";
PreparedStatement ps = null;
ResultSet rs = null;
ps = connection.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
StringBuffer sb = new StringBuffer();
tableName = tableName.substring(0, 1).toUpperCase() + tableName.subSequence(1, tableName.length());
tableName = this.dealLine(tableName);
sb.append("package " + this.packages + " ;");
sb.append(LINE);
importPackage(md, columnCount, sb);
sb.append(LINE);
sb.append(LINE);
sb.append("public class " + tableName + " {");
sb.append(LINE);
defProperty(md, columnCount, sb);
genSetGet(md, columnCount, sb);
sb.append("}");
String paths = System.getProperty("user.dir");
String endPath = paths + "\\src\\" + (packages.replace("/", "\\")).replace(".", "\\");
buildJavaFile(endPath + "\\" + tableName + ".java", sb.toString());
}
//属性生成get、 set 方法
private void genSetGet(ResultSetMetaData md, int columnCount, StringBuffer sb) throws SQLException {
for (int i = 1; i <= columnCount; i++) {
sb.append(TAB);
String pojoType = getPojoType(md.getColumnTypeName(i));
String columnName = dealLine(md, i);
String getName = null;
String setName = null;
if (columnName.length() > 1) {
getName = "public " + pojoType + " get" + columnName.substring(0, 1).toUpperCase()
+ columnName.substring(1, columnName.length()) + "() {";
setName = "public void set" + columnName.substring(0, 1).toUpperCase()
+ columnName.substring(1, columnName.length()) + "(" + pojoType + " " + columnName + ") {";
} else {
getName = "public get" + columnName.toUpperCase() + "() {";
setName = "public set" + columnName.toUpperCase() + "(" + pojoType + " " + columnName + ") {";
}
sb.append(LINE).append(TAB).append(getName);
sb.append(LINE).append(TAB).append(TAB);
sb.append("return " + columnName + ";");
sb.append(LINE).append(TAB).append("}");
sb.append(LINE);
sb.append(LINE).append(TAB).append(setName);
sb.append(LINE).append(TAB).append(TAB);
sb.append("this." + columnName + " = " + columnName + ";");
sb.append(LINE).append(TAB).append("}");
sb.append(LINE);
}
}
//导入属性所需包
private void importPackage(ResultSetMetaData md, int columnCount, StringBuffer sb) throws SQLException {
for (int i = 1; i <= columnCount; i++) {
String im=getImport(md.getColumnTypeName(i)+"_IMPORT");
if (im!=null) {
sb.append(im+ ";");
sb.append(LINE);
}
}
}
//属性定义
private void defProperty(ResultSetMetaData md, int columnCount, StringBuffer sb) throws SQLException {
for (int i = 1; i <= columnCount; i++) {
sb.append(TAB);
String columnName = dealLine(md, i);
sb.append("private " + getPojoType(md.getColumnTypeName(i)) + " " + columnName + ";");
sb.append(LINE);
}
}
private String dealLine(ResultSetMetaData md, int i) throws SQLException {
String columnName = md.getColumnName(i);
// 处理下划线情况,把下划线后一位的字母变大写;
columnName = dealName(columnName);
return columnName;
}
private String dealLine(String tableName) {
// 处理下划线情况,把下划线后一位的字母变大写;
tableName = dealName(tableName);
return tableName;
}
//下划线后一位字母大写
private String dealName(String columnName) {
if (columnName.contains("_")) {
StringBuffer names = new StringBuffer();
String arrayName[] = columnName.split("_");
names.append(arrayName[0]);
for (int i = 1; i < arrayName.length; i++) {
String arri=arrayName[i];
String tmp=arri.substring(0, 1).toUpperCase()+ arri.substring(1, arri.length());
names.append(tmp);
}
columnName=names.toString();
}
return columnName;
}
//生成java文件
public void buildJavaFile(String filePath, String fileContent) {
try {
File file = new File(filePath);
FileOutputStream osw = new FileOutputStream(file);
PrintWriter pw = new PrintWriter(osw);
pw.println(fileContent);
pw.close();
} catch (Exception e) {
System.out.println("生成txt文件出错:" + e.getMessage());
}
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
String jdbcString = "jdbc:mysql://192.168.224.1/test";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(jdbcString, "root", "root");
DatabaseMetaData databaseMetaData = con.getMetaData();
String[] tableType = { "TABLE" };
ResultSet rs = databaseMetaData.getTables(null, null, "%",tableType);
TableToJavaBean d = new TableToJavaBean();
while(rs.next()){
String tableName=rs.getString(3).toString();
d.tableToBean(con,tableName);
}
}
}
分享到:
相关推荐
生成数据库表结构: 根据解析得到的SQL语句中的表名、字段名、数据类型等信息,动态地生成相应的数据库表结构。这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL...
在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...
总的来说,"逆向生成工具,有数据库表生成java bean实体类"是一种提高开发效率、降低维护成本的利器。通过合理的XML配置和简单的执行命令,我们可以快速地从数据库中获取到对应的Java Bean实体类,使开发过程更加...
idea配置数据库,反向生成实体类demo,支持lombok,swagger2注解
下载解压至相应的盘符,打开generatorConfig.xml修改数据库连接信息等相关配置保存后,win+R调起cmd命令,进入解压后的盘符目录,我的是F盘,...overwrite 命令即可生成数据库表对应的实体类,dao以及相应的mapper文件
在Java中,反向工程常用于根据数据库表自动生成对应的实体类、DAO接口和实现、Service接口和实现等代码,减少开发者手动编写这些基础代码的工作量。 在这个特定的"JAVA MVC三层架构 代码生成器"中,它使用了反向...
"Oracle根据数据库自动生成JAVA代码"这一技术就是将数据库中的表结构映射到Java编程语言中的实体类、DAO(Data Access Object)、Service、Controller以及前端展示层的HTML模板,从而减少手动编写这些基础代码的工作...
首先,"表反向生成类"指的是从数据库中的表结构逆向工程生成Java类的过程,这些类通常代表数据库中的记录,包含了字段属性和对应的方法。这个过程可以极大地提高开发效率,避免手动编写大量的getter、setter、构造...
这些元数据是生成Java代码的基础,确保了Java类与数据库表结构的一致性。 4. Java持久化接口: Hibernate逆向工程生成的Java代码通常遵循JPA(Java Persistence API)规范,使得这些实体类可以直接在任何支持JPA的...
Java代码反向生成是一种常见的开发工具功能,它能够根据数据库中的表结构自动生成相应的Java实体类、MyBatis映射文件以及其他相关代码,极大地提高了开发效率。在Java Web开发中,MyBatis作为一款轻量级的持久层框架...
MyBatis的反向工程工具可以快速地根据数据库表生成对应的Java实体类(Model)、Mapper接口及XML配置文件,以及DAO接口和实现类。这极大地减少了手动编写这些基本代码的工作量,使得开发者能够更专注于业务逻辑的...
"mybatis实体类反向生成"是指利用特定工具,根据数据库中的表结构自动生成对应的Java实体类以及MyBatis的映射文件(XML配置文件),这一过程极大地提高了开发效率,减少了手动编写这些基础代码的工作量。 1. **...
### Eclipse中通过数据库反向生成Hibernate实体类及JPA注释详解 #### 一、配置数据源 在Eclipse中实现数据库反向生成Hibernate实体类的过程主要包括数据源配置与实体类生成两大步骤。 ##### 1. 数据源配置 **第...
在反向生成数据库文件的过程中,首先你需要确保已安装并配置好Hibernate 3.2以及相应的JDBC驱动(对于SQL 2000,这通常是Microsoft的JDBC驱动)。接下来,按照以下步骤进行操作: 1. **配置Hibernate**: 创建...
总结,通过SpringBoot和MybatisPlus的结合,我们可以方便地从Java实体类生成数据库表结构,无需手动编写SQL脚本。这种方式对于快速构建原型或者在数据丢失后恢复表结构非常有用。在实际应用中,记得对重要数据进行...
有了这种反向生成实体工具,开发者可以快速、准确地自动生成与数据库表结构对应的实体类,极大地提高了开发效率。 该工具的核心功能在于它能够通过连接数据库,读取表结构信息,包括字段名、数据类型、主键等,然后...
数据库反向生成实体类是软件开发中的一个常见实践,特别是在使用ORM(对象关系映射)框架如Hibernate时。这个过程主要是将数据库结构转化为代码,自动创建对应的Java实体类,这样可以减少手动编写这些类的工作量,...
数据库反向生成基础代码是指通过特定工具或技术从已有的数据库结构中自动生成相应的应用程序代码,这大大减少了开发人员手动编写数据访问层的工作量。在软件开发过程中,尤其是在大型项目中,这种自动化过程能提高...
Mybatis Plus的反向生成代码功能,可以根据数据库中的表结构自动生成对应的Java实体类、Mapper接口及实现、Service接口及实现、Controller等代码,大大提高了开发效率。 SpringBoot作为一款微服务框架,它简化了...
### 反向生成实体类:从数据库表结构到JavaBean 在软件开发过程中,特别是基于数据库的应用程序开发中,我们经常需要将数据库中的表映射为面向对象编程语言(如Java)中的实体类(通常称为JavaBean)。这种过程称为...