当数据库中表有多个的时候,写数据库表对应的entity类是一个工作量不小的事情,所以能自动化把数据表生成对应的Java类,有一定的意义(Save Time):
/** * Created by jiangzhiqiang on 16/3/24. */ import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; public class TableToBean { private static final String LINE = "\r\n"; private static final String TAB = "\t"; String rootPath = "/Users/jiangzhiqiang/dev"; private static Map<String, String> map; static { map = new HashMap<String, String>(); map.put("VARCHAR", "String"); map.put("INT", "Integer"); map.put("SMALLINT", "Integer"); map.put("FLOAT", "float"); map.put("TIMESTAMP", "Date"); map.put("CHAR", "String"); map.put("DATETIME", "Date"); map.put("DATE", "Date"); map.put("TIMESTAMP_IMPORT", "import java.util.Date"); map.put("DATETIME_IMPORT", "import java.util.Date"); map.put("BIGINT", "Long"); map.put("TINYINT", "Integer"); map.put("DECIMAL", "Double"); } 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 + " limit 1"; //MySql DB 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("public class " + tableName + " {"); sb.append(LINE); defProperty(md, columnCount, sb); genSetGet(md, columnCount, sb); sb.append("}"); buildJavaFile(rootPath + "/" + tableName + ".java", sb.toString()); // linux平台, 不需要把"/"转成"\\" } //属性生成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); break; } } } //属性定义 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("生成java文件出错:" + e.getMessage()); } } public static void main(String[] args) throws SQLException, ClassNotFoundException { String jdbcString = "jdbc:mysql://m3307i.test.db.dmall.com:3307/dmall_settle"; Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(jdbcString, "devtest", "WDevTest@Dmall"); DatabaseMetaData databaseMetaData = con.getMetaData(); String[] tableType = {"TABLE"}; ResultSet rs = databaseMetaData.getTables(null, null, "%", tableType); TableToBean d = new TableToBean(); while (rs.next()) { String tableName = rs.getString(3).toString(); d.tableToBean(con, tableName); } } }
Linux和Mac环境下,上面的tableToBean方法需要略做变动,段尾的代码换成:
String endPath = rootPath + (packages.replace(".", "/")); buildJavaFile(endPath + "/" + tableName + ".java", sb.toString());
相关推荐
标题“数据库表生成对应的java类”揭示了主要功能,即根据数据库中的表结构,自动生成相应的Java类。这通常是通过ORM框架如Hibernate或MyBatis来实现的。这些框架可以解析数据库表的元数据,生成具有字段和方法的...
根据MyBatis或iBatis的SQLMapper文件解析生成数据库表,通常是指通过解析MyBatis或iBatis的SQLMapper文件中的SQL语句,然后根据这些SQL语句来生成对应的数据库表结构。这样的需求可能源于需要将已有的SQLMapper文件...
而Generator则是MyBatis框架的一部分,它通过解析数据库表信息,自动生成与之对应的Java模型类、Mapper接口以及Mapper XML文件,这样开发者可以更专注于业务逻辑的实现,而非重复的基础代码编写。 使用MyBatis ...
在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...
本工具专门针对这种情况,能够根据数据库中的表结构自动生成对应的Java Bean实体类,极大地提高了开发效率。 在使用这个逆向生成工具时,首先需要配置一个XML文件。这个XML文件包含了工具所需的参数,如数据库连接...
"mybatis根据数据库表自动生成SQL、实体类、mapper文件工具"就是这样一个解决方案,它基于Eclipse集成开发环境,特别适用于使用SSM(Spring、SpringMVC、MyBatis)框架的项目。 首先,MyBatis是一个优秀的持久层...
启动项目自动生成对应实体的数据库表,示例中自动生成SysUser,User实体对应的数据库表sys_user,user 依赖包文件(可选) maven管理依赖包,自动下载 链接:...
在IT行业中,开发人员经常需要根据数据库表结构创建对应的Java实体类、Mapper接口以及XML配置文件,这是一项繁琐的工作。为了提高效率,一种常见的做法是使用逆向工程(Reverse Engineering)工具,它能够根据数据库...
1. **安装和配置MyBatis Generator(MBG)**:MBG是MyBatis的一个插件,它可以自动根据数据库表结构生成Java实体类、Mapper接口和XML配置文件。首先,你需要在项目中添加MBG的依赖,通常是在Maven或Gradle的配置文件...
"根据数据库表自动生成Java代码"是一个非常实用的功能,它允许开发者基于现有的数据库表结构快速生成对应的Java类,如DAO(Data Access Object)、XML配置文件以及实体类(Entity)。这样,开发者可以避免手动编写...
工具可以根据Oracle表的字段生成相应的Java类,包含属性和getter/setter方法,便于数据绑定。 4. 使用工具自动化生成: - MyBatis Generator (MBG):MBG是一个开源的Java工具,可以生成MyBatis的XML映射文件、...
4. **执行生成**:运行像`WindowsFormsApplication1.exe`这样的生成工具,提供配置文件和数据库连接信息,工具会自动扫描数据库表,根据配置和模板生成对应的Java Bean类。 5. **代码整合**:最后,将生成的Java源...
总结,通过SpringBoot和MybatisPlus的结合,我们可以方便地从Java实体类生成数据库表结构,无需手动编写SQL脚本。这种方式对于快速构建原型或者在数据丢失后恢复表结构非常有用。在实际应用中,记得对重要数据进行...
MyBatis代码生成器是一款强大的开发工具,专为Java开发者设计,用于自动化生成MyBatis相关的Java实体类、Mapper接口及XML配置文件。这个工具极大地提高了开发效率,减少了手动编写这些重复性工作的时间,使开发者能...
在MyBatis中,逆向工程就是从数据库的表结构出发,通过特定的配置文件和工具,生成与数据库表对应的Java实体类、Mapper接口及其XML配置文件。这样,开发者无需手动创建这些基础代码,只需关注业务逻辑部分。 3. ...
在Java开发中,尤其在基于Oracle或MySQL数据库的项目中,使用MyBatis作为持久层框架时,手动编写数据库表的实体类、MyBatis接口和对应的XML文件是一项耗时且容易出错的工作。为了解决这个问题,开发者通常会利用代码...
- 数据类型转换:数据库中的数据类型需要转换为Java类型,例如,数据库中的`INT`对应Java的`int`,`VARCHAR`对应`String`等。 - 命名规范:生成的VO类名通常遵循驼峰命名法,字段名则根据数据库列名转换,如`column_...
在开发过程中,我们有时需要根据数据库中的表结构自动生成对应的Java实体类,这就是MyBatis Generator(MBG)发挥作用的地方。MBG是一个能够根据数据库表自动创建Java模型类、Mapper接口以及XML配置文件的工具,极大...
本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 首先,我们需要理解Java实体类的基本概念。在Java世界中,实体类通常用于ORM(对象关系映射)框架,如Hibernate或...
MyBatis本身并不直接支持动态创建数据库表,但可以通过结合Spring或Java的JDBC API来实现。通常,我们会在应用初始化阶段或者在特定业务逻辑执行前,通过执行DDL(Data Definition Language)语句来创建表。例如,...