java利用反射进行简单的自动sql生成

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

对于一些初学者,写sql语句也许是一件麻烦的事情,今天我们做一个小工具,可以自动生成一些简单的sql语句.
 首先我们要获取一个模型的类名,方法如下:
     public static String getModelName(Object obj) {
        String objAllName = obj.getClass().getName();
        String objName = "";
        if (objAllName.contains(".")) {
            objName = objAllName.substring(objAllName.lastIndexOf('.') + 1);
            return objName;
        }
        return objAllName;
      }
  我们需要记录每个模型所拥有的字段,以及每个字段的类型,我们创建两个对象parameterNames,parameterType如下
        public static Map> parameterNames = new HashMap>();
    public static Map> parameterType = new HashMap>();
  接下来我们根据模型来获取类属性名和属性类型,代码如下:
      public static void registerModel(Object obj) {
        String objName = getModelName(obj);
        if (parameterNames.containsKey(objName)) {
            System.out.println("the model " + objName + " already register");
            return;
        }
        Field[] fields = obj.getClass().getDeclaredFields();
        List paraList = new ArrayList();
        HashMap typeMap = new HashMap();
        for (Field field : fields) {
            paraList.add(field.getName());
            String typeName = field.getType().getName();
            if (typeName.contains(".")) {
                typeName = typeName.substring(typeName.lastIndexOf('.') + 1);
            }
            typeMap.put(field.getName(), typeName);
        }
        parameterNames.put(objName, paraList);
        parameterType.put(objName, typeMap);
    }
 有了上面的这些信息我们就可以组装sql语句了,例如是我简单的select语句
      public static String getSimpleSelectSql(String tableName) {
        String sql = "select ";
        List parameters = parameterNames.get(tableName);
        for (int i = 0; i < parameters.size(); i++) {
            if (i == parameters.size() - 1) {
                sql += parameters.get(i) + " ";
            } else {
                sql += parameters.get(i) + ", ";
            }
        }
        return sql + "from " + tableName;
    }
   生成简单的insert语句
   public static String getInsertSql(String tableName) {
        long l1 = System.currentTimeMillis();
        String sql = "insert into " + tableName + "(";
        List paramList = ORMUtil.parameterNames.get(tableName);
        String cs = "";
        for (int i = 0; i < paramList.size(); i++) {
            if (paramList.get(i) == "id") {
                continue;
            }
            if (i == paramList.size() - 1) {
                sql += paramList.get(i) + " ";
                cs += "? ";
            } else {
                sql += paramList.get(i) + ", ";
                cs += "?, ";
            }
        }
        long l2 = System.currentTimeMillis();
        System.out.println("insert sql-->" + (l2 - l1));
        return sql + ") values(" + cs + ")";
    }
      parameterType是属性类型,当我们需要从数据库中读取数据的时候我们会使用到它!
      欢迎加入java技术分享群: 215072056

java利用反射进行简单的自动sql生成_第1张图片

     获取更多java技术请关注 异常帮助网

转载于:https://my.oschina.net/u/1013545/blog/286425

你可能感兴趣的:(java)