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;
}
}
}