工作中,总是遇到编写javabean的工作,每次都写得恶心,而且表和字段是下划线的,例如:created_date;而javabean是驼峰的,例如:createdDate。那么,就需要如下的工具类了。
/** * 从数据库表反射出实体类,自动生成实体类 * @author lqx * */ public class GenEntityMysql { private String packageOutPath = "com.funsmart.model";//指定实体生成所在包的路径 private String namespacePrefix= "com.funsmart.dao"; //指定mapper文件的命名空间 private String mapperOutPath= "com.funsmart.mapper"; //指定mapper文件的存放路径 private String authorName = "lqx";//作者名字 private String tablename = "";//表名 private String className = "";//类名 private String[] colnames; // 列名数组 private String[] colTypes; //列名类型数组 private int[] colSizes; //列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* private boolean f_jpa = false; // 是否需要生成基于注解的JPA实体对象 //数据库连接 private static final String URL ="jdbc:mysql://127.0.0.1:3306/demo"; private static final String NAME = "root"; private static final String PASS = "root"; private static final String DRIVER ="com.mysql.jdbc.Driver"; /* * 构造函数 */ public GenEntityMysql(){ } /** * 生成所有的表转成JavaBean */ public void genAllTablToBean(){ Listlist=getTableName(); for(int p=0;p list=getTableName(); // for(int p=0;p getTableName() { List list=new ArrayList (); try { DatabaseMetaData meta = DriverManager.getConnection(URL,NAME,PASS).getMetaData(); ResultSet rs = meta.getTables(null, null, null,new String[]{"TABLE"}); while (rs.next()) { String tableName = rs.getString(3); // 获取表名 if(StringUtils.isNotBlank(tableName)){ list.add(tableName); } } }catch(Exception e){ e.printStackTrace(); } return list; } /** * 将表名转为类名 * @param tableName * @return */ private String getClassName(String tableName){ // 将表名前缀t_去掉 tableName = StringUtils.removeStart(tableName, "t_"); tableName = FieldUtils.camelName(tableName); return tableName; } /** * 功能:生成实体类主体代码 * @param colnames * @param colTypes * @param colSizes * @return */ private String parse(String[] colnames, String[] colTypes, int[] colSizes) { StringBuffer sb = new StringBuffer(); sb.append("package " + this.packageOutPath + ";\r\n"); sb.append("\r\n"); //判断是否导入工具包 if(f_util){ sb.append("import java.util.Date;\r\n"); } if(f_sql){ sb.append("import java.sql.*;\r\n"); } //jpa if(f_jpa){ sb.append("import javax.persistence.Entity;\r\n"); sb.append("import javax.persistence.GeneratedValue;\r\n"); sb.append("import javax.persistence.GenerationType;\r\n"); sb.append("import javax.persistence.Id;\r\n\r\n"); } //注释部分 sb.append("/**\r\n"); sb.append(" * "+className+" 实体类\r\n"); sb.append(" * "+new Date()+"\r\n"); sb.append(" * @"+this.authorName+"\r\n"); sb.append(" */ \r\n"); if(f_jpa){ sb.append("@Entity\r\n"); } //实体部分 sb.append("public class " + initcap(className) + "{\r\n\r\n"); processAllAttrs(sb);//属性 processAllMethod(sb);//get set方法 sb.append("}\r\n"); //System.out.println(sb.toString()); return sb.toString(); } /** * 功能:生成所有属性 * @param sb */ private void processAllAttrs(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { String fieldStr = colnames[i]; if(fieldStr.indexOf("_") != -1){ fieldStr = FieldUtils.camelName(fieldStr); } sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + fieldStr + ";\r\n"); } sb.append("\r\n"); } /** * 功能:生成所有方法 * @param sb */ private void processAllMethod(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { String fieldStr = colnames[i]; if(fieldStr.indexOf("_") != -1){ fieldStr = FieldUtils.camelName(fieldStr); } if(f_jpa){ if(i==0){ sb.append("\t@Id\r\n"); sb.append("\t@GeneratedValue(strategy = GenerationType.AUTO)\r\n"); sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(fieldStr) + "(){\r\n"); }else{ sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(fieldStr) + "(){\r\n"); } }else{ sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(fieldStr) + "(){\r\n"); } sb.append("\t\treturn " + fieldStr + ";\r\n"); sb.append("\t}\r\n\r\n"); sb.append("\tpublic void set" + initcap(fieldStr) + "(" + sqlType2JavaType(colTypes[i]) + " " + fieldStr + "){\r\n"); sb.append("\t\tthis." + fieldStr + "=" + fieldStr + ";\r\n"); sb.append("\t}\r\n\r\n"); } } /** * 功能:将输入字符串的首字母改成大写 * @param str * @return */ private String initcap(String str) { char[] ch = str.toCharArray(); if(ch[0] >= 'a' && ch[0] <= 'z'){ ch[0] = (char)(ch[0] - 32); } return new String(ch); } /** * 功能:获得列的数据类型 * @param sqlType * @return */ private String sqlType2JavaType(String sqlType) { if(sqlType.equalsIgnoreCase("bit")){ return "boolean"; }else if(sqlType.equalsIgnoreCase("tinyint")){ return "int"; }else if(sqlType.equalsIgnoreCase("smallint")){ return "int"; }else if(sqlType.equalsIgnoreCase("int")||sqlType.equalsIgnoreCase("INT UNSIGNED")){ //INT UNSIGNED无符号整形 return "int"; }else if(sqlType.equalsIgnoreCase("bigint")){ return "long"; }else if(sqlType.equalsIgnoreCase("float")){ return "float"; }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric") || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")){ return "double"; }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") || sqlType.equalsIgnoreCase("text")){ return "String"; }else if(sqlType.equalsIgnoreCase("datetime")){ return "Date"; }else if(sqlType.equalsIgnoreCase("image")){ return "Blod"; } return null; } /** * 出口 * TODO * @param args */ public static void main(String[] args) { new GenEntityMysql().genTablToBean("t_city"); } }
下划线转驼峰的工具类
/** * 字段的工具类 * 将驼峰转下划线 * 将下划线转驼峰 * User: linqx * Time: 2015-07-22 22:58 */public class FieldUtils { /** * 将驼峰式命名的字符串转换为下划线大写方式。如果转换前的驼峰式命名的字符串为空,则返回空字符串。 * 例如:HelloWorld->HELLO_WORLD * @param name 转换前的驼峰式命名的字符串 * @return 转换后下划线大写方式命名的字符串 */ public static String underscoreName(String name) { StringBuilder result = new StringBuilder(); if (name != null && name.length() > 0) { // 将第一个字符处理成大写 result.append(name.substring(0, 1).toUpperCase()); // 循环处理其余字符 for (int i = 1; i < name.length(); i++) { String s = name.substring(i, i + 1); // 在大写字母前添加下划线 if (s.equals(s.toUpperCase()) && !Character.isDigit(s.charAt(0))) { result.append("_"); } // 其他字符直接转成大写 result.append(s.toUpperCase()); } } return result.toString(); } /** * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 * 例如:HELLO_WORLD->HelloWorld * @param name 转换前的下划线大写方式命名的字符串 * @return 转换后的驼峰式命名的字符串 */ public static String camelName(String name) { StringBuilder result = new StringBuilder(); // 快速检查 if (name == null || name.isEmpty()) { // 没必要转换 return ""; } else if (!name.contains("_")) { // 不含下划线,仅将首字母小写 return name.substring(0, 1).toLowerCase() + name.substring(1); } // 用下划线将原始字符串分割 String camels[] = name.split("_"); for (String camel : camels) { // 跳过原始字符串中开头、结尾的下换线或双重下划线 if (camel.isEmpty()) { continue; } // 处理真正的驼峰片段 if (result.length() == 0) { // 第一个驼峰片段,全部字母都小写 result.append(camel.toLowerCase()); } else { // 其他的驼峰片段,首字母大写 result.append(camel.substring(0, 1).toUpperCase()); result.append(camel.substring(1).toLowerCase()); } } return result.toString(); }}
就是这样啦。
java学习和交流群:22160972