mybats 自动生成SQl 语句 修改 查询 添加

最近  做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();
	}
	
	
	
	

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯苦做java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值