最近 做mybats 项目,要手写sql 语句,要与 vo 里面的字段 一一 对应才能注射
所以写了一个自用的 自动生成SQl 语句 的方法 ,
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class changeColum {
public static void main(String[] args) {
String dataName = "t_saleplan";// 需要操作的数据库表名
//需要的字段
String comlum = "id planCode month status content planer dealer operator operateTime";// 字段名
SQL(dataName, comlum);
}
private static void SQL(String dataName, String comlum) {
String toCommaString = replaceToComma(comlum, ",");// 将字段加上逗号
String tokString = replaceToj(comlum, "},#{");// 将字段加上},#{
// 生成 添加 语句
String addString = "insert into " + dataName + "(" + toCommaString
+ ")values(#{" + tokString + "})";
// 生成修改语句
String updateString= replaceupdate(comlum, dataName);
System.out.println("添加语句");
System.out.println(addString);
System.out.println("修改语句");
System.out.println(updateString);
System.out.println("查询语句");
System.out.println(list(comlum,dataName,"s"));
}
private static String replaceToComma(String comlum, String replace) {
StringBuffer sb = new StringBuffer();
sb.append(comlum);
for (int i = 0; i < sb.length(); i++) {
// 判断 ,如果是空格 ,则替换为逗号
if (java.lang.Character.isWhitespace(sb.charAt(i))) {
// 设置空格为逗号
sb.replace(i, i + 1, replace);
}
}
sb.delete(0, 3);//删除id,一般id自动生成,如果需要设置id,可跳过这段
return sb.toString();
}
//替换添加语句的字段
private static String replaceToj(String comlum, String replace) {
StringBuffer sb = new StringBuffer();
sb.append(comlum);
for (int i = 0; i < sb.length(); i++) {
// 判断 ,如果是空格 ,则替换为逗号
if (java.lang.Character.isWhitespace(sb.charAt(i))) {
// 设置空格为逗号
sb.replace(i, i + 1, replace);
}
}
sb.delete(0, 6);//删除id,一般id自动生成,如果需要设置id,可跳过这段
return sb.toString();
}
//替换修改语句的字段
private static String replaceupdate(String comlum, String dataName) {
StringBuffer sb = new StringBuffer();
sb.append(" ");//在前后加入空格就可以获取到第一个和最后一个的字段了
sb.append(comlum);
sb.append(" ");
int start;//设置截取的第一部分
int cot=0 ;//设置上个空格的位置;
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < sb.length(); i++) {
if (java.lang.Character.isWhitespace(sb.charAt(i))) {
//将空格的位置装进容器
list.add(i);
}
}
//将 每个字段放入容器中
List<String> clm = new ArrayList<String>();
for (int i = 0; i < list.size()-1; i++) {
String colum= sb.substring(list.get(i)+1, list.get(i+1));
clm.add(colum);//将过去到的字段加入
}
String colum= comlum.substring(list.indexOf(list.size())+1, comlum.length()-1);//获取最后一个字段
//开始拼合字符串
StringBuffer sb2 = new StringBuffer();
sb2.append(" update ").append(dataName).append(" set ");
for (int i = 1; i < list.size()-1; i++) {
sb2.append(clm.get(i)).append(" = #{"+clm.get(i)+"} ,");
}
sb2.delete(sb2.length()-1, sb2.length());
sb2.append(" where id = #{"+clm.get(0)+"}");
return sb2.toString();
}
//list
private static String list(String comlum, String dataName,String SName) {
StringBuffer sb = new StringBuffer();
sb.append(" ");//在前后加入空格就可以获取到第一个和最后一个的字段了
sb.append(comlum);
sb.append(" ");
int start;//设置截取的第一部分
int cot=0 ;//设置上个空格的位置;
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < sb.length(); i++) {
if (java.lang.Character.isWhitespace(sb.charAt(i))) {
//将空格的位置装进容器
list.add(i);
}
}
//将 每个字段放入容器中
List<String> clm = new ArrayList<String>();
for (int i = 0; i < list.size()-1; i++) {
String colum= sb.substring(list.get(i)+1, list.get(i+1));
clm.add(colum);//将过去到的字段加入
}
String colum= comlum.substring(list.indexOf(list.size())+1, comlum.length()-1);//获取最后一个字段
//开始拼合字符串
StringBuffer sb2 = new StringBuffer();
sb2.append("select ");
for (int i = 0; i < clm.size(); i++) {
sb2.append(SName+".");
sb2.append(clm.get(i)).append(" ").append(clm.get(i)).append(",");
}
sb2.delete(sb2.length()-1, sb2.length());
sb2.append(" from ").append(dataName).append(" ").append(SName);
return sb2.toString();
}
}