mybatis 自动生成xml 工具类

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;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值