对于一些初学者,写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<String, List<String>> parameterNames = new HashMap<String, List<String>>();
public static Map<String, Map<String, String>> parameterType = new HashMap<String, Map<String, String>>();
接下来我们根据模型来获取类属性名和属性类型,代码如下:
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<String> paraList = new ArrayList<String>();
HashMap<String, String> typeMap = new HashMap<String, String>();
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<String> 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<String> 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技术请关注 异常帮助网