public class ScSqlTest { private static final String VARCHAR="VARCHAR"; private static final String BIGINT="BIGINT"; private static final String CHAR="CHAR"; private static final String TIMESTAMP ="TIMESTAMP"; private static final String INTEGER="INTEGER"; private static final String DECIMAL="DECIMAL"; private Class myClass=ScRoute.class;//mybatis对应要生成的类 private ArrayList<MyOb> getList(){ ArrayList<MyOb> arrayList=new ArrayList(); //字段 不需要id // arrayList.add(getObject("carrier_party_id", VARCHAR)); // arrayList.add(getObject("carrier_party_name", BIGINT)); // arrayList.add(getObject("route_info", CHAR)); // arrayList.add(getObject("remark", TIMESTAMP)); getArrByClass(myClass,arrayList); //固定项 arrayList.add(getObject("createPartyId", BIGINT)); arrayList.add(getObject("modifyPartyId", BIGINT)); arrayList.add(getObject("gmtCreate", TIMESTAMP)); arrayList.add(getObject("gmtModified", TIMESTAMP)); arrayList.add(getObject("isDeleted", CHAR)); arrayList.add(getObject("updateVersion", INTEGER)); return arrayList; } private void getArrByClass(Class cla,ArrayList<MyOb> arrayList){ Field[] fields=cla.getDeclaredFields(); for (Field field:fields){ //规避 ArrayList<String> strings=new ArrayList<>(); strings.add("id"); strings.add("serialVersionUID"); strings.add("createPartyId"); strings.add("modifyPartyId"); strings.add("gmtCreate"); strings.add("gmtModified"); strings.add("isDeleted"); strings.add("updateVersion"); boolean reset=false; for (String s:strings){ if (field.getName().equals(s)){ reset=true; } } if (reset)continue; String type=""; if (field.getType().equals(Long.class)){ type=BIGINT; }else if (field.getType().equals(String.class)){ type=VARCHAR; }else if (field.getType().equals(Integer.class)){ type=INTEGER; }else if (field.getType().equals(Date.class)){ type=TIMESTAMP; }else if (field.getType().equals(Double.class)){ type=DECIMAL; } arrayList.add(getObject(field.getName(), type)); } } //生成sql @Test public void generateSql(){ ArrayList<MyOb> arrayList=getList(); // System.out.println("wode map"); System.out.println(""); System.out.println("<mapper namespace=\"com.tf56.scTms.mapper.Mapper\">"); System.out.println(" <resultMap id=\"BaseResultMap\" type=\""+myClass.getCanonicalName()+"\">"); System.out.println(" <id column=\"id\" jdbcType=\"BIGINT\" property=\"id\" />"); for (MyOb myOb:arrayList){ System.out.println(" <result column=\""+myOb.getKey()+"\" jdbcType=\""+myOb.getType()+"\" property=\""+myOb.getName()+"\" />"); } System.out.println(" </resultMap>"); // 展现列 // System.out.println("wode 展现列 query_columns :"); System.out.println(""); System.out.println(" <sql id=\"query_columns\">"); System.out.println(" id,"); System.out.println(" "+getColumn(arrayList)); System.out.println(" </sql>"); //新增列 // System.out.println("wode 新增列 insert_columns :"); System.out.println(""); System.out.println(" <sql id=\"insert_columns\">"); System.out.println(" "+getColumn(arrayList)); System.out.println(" </sql>"); // 查询条件 // System.out.println("wode query_condition"); System.out.println(""); System.out.println(" <sql id=\"query_condition\">"); System.out.println(" is_deleted = 0"); for (MyOb myOb:arrayList){ System.out.println(" <if test=\""+myOb.getName()+" != null \"> AND "+myOb.getKey()+"=#{"+myOb.getName()+"}</if>\t"); } System.out.println(" </sql>"); System.out.println("</mapper>"); } private String getColumn(ArrayList<MyOb> arrayList){ String insert_columns=""; for (int i=0;i<arrayList.size();i++){ MyOb myOb=arrayList.get(i); if (insert_columns.length()==0){ insert_columns=myOb.getKey(); }else { if (i%4==0){ insert_columns=insert_columns+",\n "+myOb.getKey(); }else { insert_columns=insert_columns+", "+myOb.getKey(); } } } return insert_columns; } private static MyOb getObject(String name,String type){ MyOb myOb=new MyOb(); //适用于 驼峰 myOb.setKey(getkey(name)); // myOb.setName(name); //适用于 下划线 // myOb.setKey(name); myOb.setName(getOppositeKey(name)); myOb.setType(type); return myOb; } private static String getOppositeKey(String name){ for (int i=0;i<name.length();i++){ int index=name.indexOf("_"); if (index>0){ String _s=name.substring(index,index+2); return getOppositeKey(name.replace(_s,name.substring(index+1,index+2).toUpperCase())); } } return name; } private static String getkey(String name){ for (int i=0;i<name.length();i++){ String sU = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (sU.indexOf(name.charAt(i)) != -1) { char st=name.charAt(i); String newStr= name.replace(st+"","_"+String.valueOf(st).toLowerCase()); return getkey(newStr); } } return name; } public static class MyOb{ private String key; private String name; private String type; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } } }
mybatis 自动生成xml 工具类
最新推荐文章于 2024-03-29 14:00:09 发布