根据数据库表结构生成 javaBean 。
这个功能以前一直使用 hibernate ,老觉得不方便,而且hibernate 生成的javabean 没有注释(估计是我不会配置)
所以就写了这么一个工具类,将 数据库中的表生成 javaBean .
package com.xxx.common; import java.io.File; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @createtime: 2012-10-19 下午03:29:35 * * @version: 将 表结构生成 实体类 */ public class CopyOfSqlFiledUtil { private static String srcDirectory = "c:/xxx/";// 存放.java源文件的目录 private static String classDirectory = "c:/xxx/class/";// 存放.class的目录 private static String classPackage = "com.xxx.entity";// 对应bean对象的包名 private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=GBK"; private static String user = "xxx"; private static String pass = "xxx"; private static Set<String> columnTypeSet = new HashSet<String>(); private final static String decollator = "★"; // 分隔符 private static void init() { // 设置一个目录 File dir = new File(CopyOfSqlFiledUtil.srcDirectory); File dir2 = new File(CopyOfSqlFiledUtil.classDirectory); if (!dir.exists()) { dir.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件 } if (!dir2.exists()) { dir2.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件 } } private static void getJavaFile(String tableName, List<String> columnList) throws Exception { System.out.println("a::" + tableName); String columnName = ""; String zhushi = ""; String columnType = ""; String columnType4Obj = ""; if (columnList != null && !columnList.isEmpty()) { StringBuffer fileContent = new StringBuffer(); // 生成一个包 fileContent.append("package "); fileContent.append(CopyOfSqlFiledUtil.classPackage); fileContent.append(";\n\n"); // 生成类声明类这一行 fileContent.append("public class "); fileContent.append(tableName); fileContent.append(" implements java.io.Serializable {\n\n"); // 生成构造方法 // fileContent.append("\tprivate " + tableName + "(){\n"); // fileContent.append("\t}\n"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // System.err.println("columnName="+columnName+" , zhushi="+zhushi+" , columnType="+columnType+" , columnType4Obj="+columnType4Obj); // 生成javaBean的私有属性 fileContent.append("\n\t private " + columnType4Obj + " "); fileContent .append(columnName.toString() + ";\t//" + zhushi); } } fileContent.append("\n"); fileContent.append("\n\n\n\t/*下面是取得属性值的get方法*/"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // 生成get方法 fileContent.append("\n\t public "); fileContent.append(columnType4Obj); fileContent.append(" get"); fileContent.append(columnName.toString().substring(0, 1) .toUpperCase()); fileContent.append(columnName.toString().substring(1)); fileContent.append("(){\n"); fileContent.append("\t\t return this." + columnName.toString() + ";\n\t}"); // fileContent.append("\n"); } } // 生成set方法 fileContent.append("\n"); fileContent.append("\n\n\n\t/*下面是设置属性值的set方法*/"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // 生成set方法 fileContent.append("\n\t public void set"); fileContent.append(columnName.toString().substring(0, 1) .toUpperCase()); fileContent.append(columnName.toString().substring(1)); fileContent.append("( " + columnType4Obj + "\t"); fileContent.append(columnName.toString()); fileContent.append(" ){\n"); fileContent.append("\t\tthis."); fileContent.append(columnName.toString()); fileContent.append("="); fileContent.append(columnName.toString()); fileContent.append(";\n\t}"); fileContent.append("\n"); } } fileContent.append("}"); // 形成一个.java文件 java.io.FileWriter file = new java.io.FileWriter( CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java"); file.write(fileContent.toString()); file.close(); file = null; // 编译成.class文件 String[] arg = new String[] { "-d", CopyOfSqlFiledUtil.classDirectory, CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java" }; com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); int statues = javac.compile(arg); System.out.println("OK" + statues); String className = CopyOfSqlFiledUtil.classPackage + "."; className += tableName; } } /** * 驼峰转化为 大写 xxCar 转换为 xx_car * * @param param * @return */ public static String camel4underline(String param) { Pattern p = Pattern.compile("[A-Z]"); if (param == null || param.equals("")) { return ""; } StringBuilder builder = new StringBuilder(param); Matcher mc = p.matcher(param); int i = 0; while (mc.find()) { builder.replace(mc.start() + i, mc.end() + i, "_" + mc.group().toLowerCase()); i++; } if ('_' == builder.charAt(0)) { builder.deleteCharAt(0); } return builder.toString(); } private static String changeStyle(String str, boolean toCamel) { if (str == null || str.isEmpty()) return str; if (toCamel) { String[] s = str.split("_"); String temp = ""; for (int i = 0; i < s.length; i++) { String m = s[i].substring(0, 1).toUpperCase() + s[i].substring(1); temp += m; } return temp; } else { return camel4underline(str); } } /** * * @param jdbcType * @return */ private static String switchIt(String jdbcType) { return jdbc2objMap.get(jdbcType); } /** * 得到某个表的所有字段信息 * * @param tableName * @param conn * @return xxx_source|状态|TINYINT * @throws Exception */ private static List<String> getColumnsByTableName(String tableName, Connection conn) throws Exception { List<String> columns = new ArrayList<String>(); ResultSet rSet = null; try { if (conn == null) { conn = getConnection(); } DatabaseMetaData dbms = conn.getMetaData(); rSet = dbms.getColumns(null, null, tableName, null); while (rSet.next()) { String columnName = rSet.getString("COLUMN_NAME"); String remark = rSet.getString("REMARKS"); String typeName = rSet.getString("TYPE_NAME"); columnTypeSet.add(typeName); // System.err.println(columnName + "|" + remark + "|" + // typeName); columns.add(columnName + decollator + remark + decollator + typeName); } return columns; } catch (Exception e) { e.printStackTrace(); throw e; } } /** * 得到 conn 数据库的 所有表名称 * * @param conn * @return * @throws Exception */ private static List<String> getAllTableName(Connection conn) throws Exception { List<String> tableNames = new ArrayList<String>(); ResultSet rSet = null; try { if (conn == null) { conn = getConnection(); } DatabaseMetaData dbms = conn.getMetaData(); rSet = dbms.getTables(null, null, null, null); while (rSet.next()) { // System.out.println("talbeName :" + rSet.getString(3)); String tableName = rSet.getString(3); tableNames.add(tableName); } return tableNames; } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (rSet != null) { rSet.close(); } } } /** * 得到一个数据库连接 * * @return */ private static Connection getConnection() throws Exception { try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user,pass); return conn; } catch (Exception e) { e.printStackTrace(); throw e; } } private static Map<String, String> jdbc2objMap = new HashMap<String, String>(); static { jdbc2objMap.put("CHAR", "String"); jdbc2objMap.put("VARCHAR", "String"); jdbc2objMap.put("LONGVARCHAR", "String"); jdbc2objMap.put("TEXT", "String"); jdbc2objMap.put("NUMERIC", "java.math.BigDecimal"); jdbc2objMap.put("DECIMAL", "java.math.BigDecimal"); jdbc2objMap.put("BIT", "boolean"); jdbc2objMap.put("INT", "int"); jdbc2objMap.put("INT UNSIGNED", "int"); jdbc2objMap.put("TINYINT", "int"); jdbc2objMap.put("TINYINT UNSIGNED", "int"); jdbc2objMap.put("SMALLINT", "int"); jdbc2objMap.put("TINYINT UNSIGNED", "int"); jdbc2objMap.put("INTEGER", "int"); jdbc2objMap.put("INTEGER UNSIGNED", "int"); jdbc2objMap.put("BIGINT", "long"); jdbc2objMap.put("BIGINT UNSIGNED", "long"); jdbc2objMap.put("REAL", "float"); jdbc2objMap.put("FLOAT", "double"); jdbc2objMap.put("DOUBLE", "double"); jdbc2objMap.put("BINARY", "byte[]"); jdbc2objMap.put("VARBINARY", "byte[]"); jdbc2objMap.put("LONGVARBINARY", "byte[]"); jdbc2objMap.put("DATE", "java.util.Date"); jdbc2objMap.put("DATETIME", "java.util.Date"); jdbc2objMap.put("TIME", "java.util.Date"); jdbc2objMap.put("TIMESTAMP", "java.util.Date"); } public static void main(String[] args) throws Exception { Connection conn = null; try { init(); conn = getConnection(); List<String> tables = getAllTableName(conn); List<String> list = null; if(tables!=null && !tables.isEmpty()){ for(String table : tables){ if(table.startsWith("xxx_")){ list = getColumnsByTableName(table, conn); getJavaFile(changeStyle(table,true), list); } } } if(columnTypeSet!=null && !columnTypeSet.isEmpty()){ for (Iterator iterator = columnTypeSet.iterator(); iterator.hasNext();) { String string = (String) iterator.next(); System.err.println(string); } } //System.out.println(changeStyle("xxx", false)); } catch (Exception e) { } finally { conn.close(); } } }
相关推荐
- 生成的Getters和Setters应该遵循Java Bean规范,即get方法返回变量值,set方法接收一个参数并设置变量值。 - 注意不要对final或static变量生成Setters,因为它们不能被实例方法改变。 - 生成的注释应当清晰地...
标题中的“自动生成带注释的getter和setter方法(Intellij、AndroidStudio插件)”指的是在编程过程中,开发者可以利用特定的插件自动化生成Java Bean模式中的getter和setter方法,并且这些方法会带有注释。...
VSStrus是一款针对Java开发者的实用工具,其主要功能是模仿Struts框架的部分特性,帮助程序员快速地根据数据库中的表结构自动生成对应的Java类文件。这个过程极大地简化了对象模型的创建,使得开发者能够更加专注于...
使用 @Autowired 可以消除 set、get 方法。在使用 @Autowired 之前,我们对一个 bean 配置起属性时,是使用 属性名" value=" 属性值"/> 的方式来配置,比较繁琐,而且代码比较多。在 Spring 2.5 引入了 @Autowired ...
- **getProperty**和**setProperty**动作用于读取和设置bean的属性值。 5.3 辅助类 - 辅助类可以简化bean的操作,如属性访问器和修改器。 ### 第6章 JSP文件操作 涵盖文件的读取、创建、删除,以及文件上传和下载...
- GET和SET方法用于访问和修改属性,遵循Java Bean规范,如getAge(), setAge(int age)。 5. 属性变量的命名和注释规范 - 属性变量名也采用小驼峰命名法,如:firstName。 - 访问权限控制应根据需求设置,如...
声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe) @Data 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法 @Id & @GeneratedValue(strategy= GenerationType....
- 文件、包头部应包含功能描述、作者、版权、创建和修改记录,使用C-Style注释而非JavaDoc注释。 - 类、方法、变量的注释应遵循JavaDoc规范,提供详细的功能、条件、参数说明,以方便生成易读的JavaDoc文档。 - ...
以下将根据给定文件的信息,详细解析Java编程中的核心规范,特别关注代码结构、封装原则、注释规范以及文档注释的重要性。 ### 1. **源代码的头部编写** 源代码的头部信息是任何Java项目的基础,它包含了文件的...
2. **EntityBean**:持久化对象,映射数据库中的实体记录,主要用于数据存储和检索。 ### **Struts+EJB开发流程** 结合Struts和EJB,通常的开发流程包括: 1. 创建EJB组件来处理业务逻辑。 2. 设计Action和...
- 在Eclipse生成的bean类中,手动添加注释以增强代码可读性。 - 类的布尔型判断方法可以使用`is`前缀,或者根据逻辑使用`equal`或`equals`等有意义的单词。 遵循这些规范可以提升代码的统一性和可维护性,尤其...
5. 调用JavaBean的标记:在JSP中调用JavaBean会用到`<jsp:useBean>`, `<jsp:setProperty>`和`<jsp:getProperty>`标记,而`<java:bean>`不是JSP的标准标记。 6. Tomcat默认端口号:Tomcat服务器默认使用的端口号是...
- **工厂模式**:分为数据访问工厂(`IDataFactory`)和实体工厂(`EntityFactory`),用于创建具体的数据访问对象和实体对象。 - **文件目录与文件名规范**: - `images/`:存放图片资源。 - `styles/`:存放...
- HTTP响应结构:响应行、响应头、空行和实体内容。 - 重定向:`sendRedirect(url)`,将请求导向新页面。 - 设置刷新:`Response.setHeader("Refresh","3;url=index.jsp")`,3秒后自动刷新到index.jsp。 10. **...
两层结构包括客户层和服务器层,三层结构则增加了应用服务器层和数据服务器层。 3. Servlet技术: - Servlet是Java EE中的服务器端组件,用于处理HTTP请求。例如,Servlet可以通过`ServletResponse`的`...
16. EJB(Enterprise JavaBeans)相关知识,EJB包含Session Bean、Entity Bean和Message Driven Bean,基于JNDI、RMI、JTA等技术,可以部署在多种应用服务器上,如Tomcat、JBoss、WebLogic,选项A、B和D正确。...
- 在JSP中,使用`jsp:setProperty`动作来设置Javabean的属性,例如`<jsp:setProperty name="beanName" property="propertyName" value="value"/>`。 10. **访问控制符** - Java中的类及类成员访问控制符包括:...
- **节点**:XML文档中的每个部分都是一个节点,包括元素、属性、文本、命名空间、处理指令和注释。 - **路径表达式**:XPath通过路径表达式来定位节点,类似于文件系统的路径。 - **轴(Axes)**:定义了节点...
布尔属性的存取方法采用`is`或`has`前缀,如`isEmpty()`,其他属性使用`get`和`set`。 - **方法名**:根据功能描述命名,如`add()`, `update()`, `delete()`。动作方法通常由动词和宾语组成,如`queryById()`。 - ...
4. **JPA(Java Persistence API)**:在处理数据库操作时,`@Entity`, `@Table`, `@Id`等注释用于声明实体类和其映射关系,简化了ORM(对象关系映射)的配置。 5. **CDI(Contexts and Dependency Injection)**:...