package message.jdbc.base; import javassist.ClassPool; import javassist.LoaderClassPath; import message.jdbc.mapper.DynamicRowMapper; /** * dynamic bean create util * * @author sunhao(sunhao.java@gmail.com) * @version V1.0, 2012-4-10 上午12:56:03 */ public class DynamicBeanUtils { public final static ClassPool classPool; static { ClassPool parent = ClassPool.getDefault(); ClassPool child = new ClassPool(parent); child.appendClassPath(new LoaderClassPath(DynamicRowMapper.class.getClassLoader())); child.appendSystemPath(); // the same class path as the default one. child.childFirstLookup = true; // changes the behavior of the child. classPool = child; } public static String createMapperKey(Class clazz, String sql) { StringBuffer key = new StringBuffer(); key.append(sql) .append("-") .append(clazz.getName()); return key.toString(); } /** * 将类中的字段转成数据库中的字段 * 格式:pkId --> pk_id * * @param name * @return */ public static String underscoreName(String name) { StringBuffer result = new StringBuffer(); if (name != null && name.length() > 0) { for (int i = 0; i < name.length(); i++) { String tmp = name.substring(i, i + 1); //判断截获的字符是否是大写,大写字母的toUpperCase()还是大写的 if (tmp.equals(tmp.toUpperCase())) { //此字符是大写的 result.append("_").append(tmp.toLowerCase()); } else { result.append(tmp); } } } return result.toString(); } /** * 将数据库中的字段转成类中的字段 * 格式:pk_id --> pkId * * @param name * @return */ public static String decodeUnderscoreName(String name) { StringBuffer result = new StringBuffer(); boolean up = false; if (name != null && name.length() > 0) { //转成小写 name = name.toLowerCase(); for (int i = 0; i < name.length(); i++) { //取得i位置的字符 String tmp = name.substring(i, i + 1); if ("_".equals(tmp)) { up = true; //结束本次循环,进入下次循环 continue; } if (up) { result.append(tmp.toUpperCase()); up = false; } else { result.append(tmp); } } } return result.toString(); } /** * @param clazzs * @param sql * @param forMap * @return */ public static String createMapperKey(Class[] clazzs, String sql, boolean forMap) { StringBuffer result = new StringBuffer(); result.append(sql); result.append(forMap ? "true" : "false"); result.append("-"); for (Class c : clazzs) { result.append(c.getName()); } return result.toString(); } }