最近在工作中遇到表中有100多个字段,要写公共的查询列实在头大,因此突然想到可以从生成的sql执行脚本中,把该表中的列截取出来如这样的数据:

自动生成mybatis中baseColumn 公共字段名称

很有规律对不对,然后上代码

private static void autoCreateBaseColumn(String filePath,String columnFix) {
            //首先获取到文件 我是保存到本地的一个txt文件,每次拿时方便,另一个参数是要加的前缀,一般为表的简写
            String strFile = filePath; 
            //把文件内容用流的形式拿出来放到String变量中
            StringBuffer sb = new StringBuffer();
            try {
                BufferedReader reader = new BufferedReader(new FileReader(strFile));
                String str = ""    ;
                while((str = reader.readLine())!=null) { //按行获取
                    String string = str.trim();
                    String[] split = string.split(" ");
                    sb.append(columnFix+split[0]+",");
                    sb.append("\r\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            //然后对string进行操作
            //一行输出
            //String substring = sb.toString().substring(0,sb.length()-1);
            //分行输出
            String substring = sb.toString().substring(0,sb.length()-3);
            System.out.println(substring);
        }

最后,在控制台展出

自动生成mybatis中baseColumn 公共字段名称 

确实很方便,而且通过这样启发,resultMap的列也可以这样生成,代码如下:

private static void autoCreateResult(String filePath) {
            try {
                BufferedReader reader = new BufferedReader(new FileReader(filePath));
                String str = "";
                StringBuffer sb = new StringBuffer();
                while((str = reader.readLine())!=null) {
                    str = str.trim();
                    String[] split = str.split(" ");
                    sb.append("<result column=");
                    sb.append("\""+split[0]+"\" ");  //还是通过空格分隔
                    String lowerCase = split[0].toLowerCase();  //先把所有的字段转为小写
                    String[] split2 = lowerCase.split("_");
                    for (int i= 0;i<split2.length;i++) {  
                        if(i == 0) {
                            lowerCase = split2[i];
                        }else {
                            lowerCase = lowerCase+ split2[i].substring(0, 1).toUpperCase()+split2[i].substring(1); //将_后的第一个字母大写
                        }
                    }
                    sb.append("property=\"");
                    sb.append(lowerCase+"\" ");
                    sb.append(" jdbcType=\"");
                    String type = "" ;
                    for(int i = 1;i<split.length;i++) {
                        if(!split[i].trim().startsWith(" ")) { //获取jdbc类型,starWith里要打个空格,要不一直进不去判断里,系统大牛可以解释一下
                            String string = split[i];
                            if(string.startsWith("VARCHAR")) {
                                type = "VARCHAR";
                            }else if(string.startsWith("NUMBER")) {
                                type = "DECIMAL";
                            }else if(string.startsWith("DATE")) {
                                type = "DATE";
                            }
                            
                        }
                    }
                    
                    sb.append(type+"\"");
                    sb.append(" />");
                    sb.append("\r\n");
                }
                System.out.println(sb.toString());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }

打印出如下:

自动生成mybatis中baseColumn 公共字段名称 

 代码没有多难,但感觉还是有点小用,希望可以帮到大家,第一次写有不对的地方希望大家指出了

相关文章: