首页>代码>java常用工具类分享>/非常常用的工具类/lmc/SqlAnnoUtils.java
package lmc;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SqlAnnoUtils {
	public static String getSqlMap(Object bean){
		StringBuilder res = new StringBuilder();
		if(bean==null){
			System.err.println("参数对象为空");
			return res.toString();
		}
		try{
			res.append("<resultMap class=\""+bean.getClass().getName()+"\" id=\"sqlmap_"+bean.getClass().getSimpleName().toLowerCase()+"\">\n");
			Field[]fds = bean.getClass().getDeclaredFields();
			int[]lens = SqlAnnoUtils.getAnnoNums(bean);
			StringBuilder colStr = new StringBuilder();
			StringBuilder sqlStr = new StringBuilder();
			StringBuilder valStr = new StringBuilder();
			if(fds!=null&&fds.length>0){
				for(int i=0;i<fds.length;i++){
					String col = fds[i].getName();
					String type = SqlAnnoUtils.getType(fds[i].getType().getName());
					res.append("\t<result property=\""+col+"\" column=\""+col+"\" jdbcType=\""+type+"\"/>\n");
					colStr.append(col+",");
					valStr.append("\t\t#"+col+":"+type+"#,\n");
					if(lens[i]>0){
						sqlStr.append(col.toUpperCase()+"  "+type.toUpperCase()+"("+lens[i]+"),\n");
					}else{
						sqlStr.append(col.toUpperCase()+"  "+type.toUpperCase()+",\n");
					}
				}
				colStr.deleteCharAt(colStr.length()-1);
				sqlStr.deleteCharAt(sqlStr.length()-1);
				sqlStr.deleteCharAt(sqlStr.length()-1);
				valStr.deleteCharAt(valStr.length()-1);
				valStr.deleteCharAt(valStr.length()-1);
			}
			res.append("</resultMap>\n\niBatis配置文件基本语句:\n"+colStr.toString()+"\n"+valStr.toString()+"\n\nOracle数据库创建表SQL语句\n"+sqlStr.toString());
		}catch(Exception e){
			e.printStackTrace();
		}
		return res.toString();
	}
	private static String getType(String type){
		if(type.endsWith("Character")||type.endsWith("char")){
			return "CHAR";
		}
		if(type.endsWith("String")){
			return "VARCHAR";
		}
		if(type.endsWith("Boolean")||type.endsWith("boolean")){
			return "NUMBER";
		}
		if(type.endsWith("Byte")||type.endsWith("byte")){
			return "NUMBER";
		}
		if(type.endsWith("Short")||type.endsWith("short")){
			return "NUMBER";
		}
		if(type.endsWith("Integer")||type.endsWith("int")){
			return "NUMBER";
		}
		if(type.endsWith("Long")||type.endsWith("long")){
			return "NUMBER";
		}
		if(type.endsWith("Float")||type.endsWith("float")){
			return "NUMBER";
		}
		if(type.endsWith("Double")||type.endsWith("double")){
			return "NUMBER";
		}
		if(type.endsWith("BigDecimal")){
			return "NUMBER";
		}
		if(type.endsWith("Time")){
			return "DATE";
		}
		if(type.endsWith("Date")){
			return "DATE";
		}
		if(type.equals("Timestamp")){
			return "TIMESTAMP";
		}else{
			return "工具类还没进行处理";
		}
	}
	private static int[]getAnnoNums(Object bean){
		int[]res = null;
		String dir = System.getProperty("user.dir");
		String[]names = bean.getClass().getName().split("[.]");
		StringBuffer path = new StringBuffer(dir+"\\src\\");
		for(int i=0;i<names.length;i++){
			path.append(names[i]+"\\");
		}
		path.deleteCharAt(path.length()-1);
		path.append(".java");
		try{
			FileInputStream fis = new FileInputStream(path.toString().replace("\\","/"));
			byte[]data = new byte[fis.available()];
			fis.read(data);
			String con = new String(data);
			int a = 0;
			int b = -1;
			int j = 0;
			res = new int[200];
			while(a!=-1){
				a = con.indexOf("/*",a);
				if(a!=-1){
					b = con.indexOf("*/",a);
					if(b!=-1){
						int num = SqlAnnoUtils.getNum(con.substring(a+1,b).replace('*',' '));
						if(num>-1){
							res[j++]=num;
						}
						a = b;
					}
				}
			}
			System.out.println("有数字的文档注解的个数:"+j);
		}catch(Exception e){
			e.printStackTrace();
		}
		return res;
	}
	private static int getNum(String anno){
		Matcher mch = Pattern.compile("\\d*").matcher(anno);
		if(anno.indexOf("set()")!=-1){
			while(mch.find()){
				if(!mch.group().equals("")){
					String num = mch.group();
					return Integer.parseInt(num);
				}
			}
		}
		return -1;
	}
}
最近下载更多
moomin709  LV24 2020年7月6日
wei112233  LV15 2020年2月2日
乞丐哥哥  LV23 2018年1月19日
fergfergfer  LV2 2017年10月11日
seasuka  LV15 2017年7月31日
zqlongre  LV2 2016年10月3日
wzg356  LV18 2015年1月3日
yongfahuang  LV15 2014年6月12日
745030904  LV10 2014年5月21日
AXIN  LV36 2014年2月25日
最近浏览更多
lee123321  LV22 2023年12月19日
3334004690  LV10 2023年11月1日
悟道子  LV16 2023年7月19日
ewan007  LV30 2022年7月8日
a3870764722a  LV22 2022年6月7日
crosa_Don  LV18 2022年3月31日
zxf987654321 2022年2月12日
暂无贡献等级
yyde52 2021年12月15日
暂无贡献等级
zhuiyunyiye  LV12 2021年12月13日
zs131420  LV1 2021年11月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友