博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将表转javabean(基于mysql)
阅读量:6737 次
发布时间:2019-06-25

本文共 9633 字,大约阅读时间需要 32 分钟。

hot3.png

工作中,总是遇到编写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(){    	List
 list=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

转载于:https://my.oschina.net/linqunxuan/blog/537126

你可能感兴趣的文章