`

通过读取对应的表结构生成javabean和ibatis映射,完整版

阅读更多

1、如果拿到表结构请关注我前面的文章

2、生成bean

package com.pingan.util;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import com.pingan.bean.ColumnModel;

public class BeanProcess {
	
	/**
	 * 从表结构中去生成javabean
	 * @param structureList
	 * @param beanName
	 * @return
	 */
	public static String genJavaBeanFromTableStructure(List<ColumnModel> columnModelList,String beanName,String packagePath){
		StringBuffer sb = new StringBuffer();
		try {
			//java package引入
			sb.append("package "+packagePath.replace("\\", ".")+";\r\n");
			//java import引入
			for (ColumnModel columnModel : columnModelList) {
				String columnClassName = columnModel.getColumnClassName();
				if(!columnClassName.contains("lang")){
					sb.append("import "+columnModel.getColumnClassName()+";\r\n");
				}
			}
			//java 类声明
			sb.append("public class "+StringUtils.toFirstCharUpCase(beanName)+" {\r\n");
			//java 属性
			for (ColumnModel columnModel : columnModelList) {
				if(StringUtils.isNotBlank(columnModel.getRemarks())){
					sb.append("	//"+columnModel.getRemarks()+" \r\n");
				}
				sb.append("	private "+columnModel.getFieldType()+" "+columnModel.getFieldName()+";\r\n");
			}
			sb.append("\r\n");
			//java 属性get set方法
			for (ColumnModel columnModel : columnModelList) {
				sb.append(
						"\tpublic "+columnModel.getFieldType()+" get"+StringUtils.toFirstCharUpCase((String) columnModel.getFieldName())+"() {\r\n" +
						"\t\treturn "+columnModel.getFieldName()+";\r\n" + 
						"\t}\r\n" + 
						"\r\n" + 
						"\tpublic void set"+StringUtils.toFirstCharUpCase((String) columnModel.getFieldName())+"("+columnModel.getFieldType()+" "+columnModel.getFieldName()+") {\r\n" + 
						"\t\t this."+columnModel.getFieldName()+" = "+columnModel.getFieldName()+";\r\n" + 
						"\t}\r\n\r\n");
			}
			sb.append("}\r\n");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	/**
	 * 将bean信息读到磁盘上
	 * @param classPath
	 * @param packagePath
	 * @param tableName
	 * @param beanClassName
	 * @throws IOException
	 */
	public static void createBeanInDisk(String classPath,String packagePath,String tableName,String beanClassName) throws IOException{
		List<ColumnModel> columnModelList = JdbcUtil.getTableStructure(tableName);
		String beanDetail = genJavaBeanFromTableStructure(columnModelList,beanClassName,packagePath);
		System.out.println("已生成数据:\r"+beanDetail);
		File javaFile = new File(classPath+File.separator+packagePath+File.separator+StringUtils.toFirstCharUpCase(beanClassName)+".java");
		FileUtils.writeStringToFile(javaFile, beanDetail);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String classPath = "D:\\zhuangxinliang\\commonWeb\\src";
		String packagePath = "com\\pingan\\bean";
		try {
			createBeanInDisk(classPath,packagePath,"wealth_product_info","productInfo");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 3、生成对应的ibatis映射

package com.pingan.util;

import java.util.List;

import com.pingan.bean.ColumnModel;

public class IbatisProcess {
	
	/**
	 * 生成ibatis对象别名
	 * @param clazz
	 * @return
	 */
	public static String genObjectTypeAlias(Class<?> clazz){
		return "<typeAlias alias=\""+clazz.getSimpleName().toUpperCase()+"\" type=\""+clazz.getName()+"\"></typeAlias>";
	}
	
	/**
	 * 生成whereSql语句块
	 * @param clazz
	 * @return
	 */
	public static String genWhereSql(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){
		StringBuffer sb = new StringBuffer();
		sb.append("<sql id=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\">");
		for (ColumnModel columnModel : columnModelList) {
			if(!columnModel.getColumnName().contains("ID_")){
				sb.append("    <isNotEmpty property =\""+columnModel.getFieldName()+"\" prepend=\"and\">\r\n");
				sb.append("       "+columnModel.getColumnName()+"=#"+columnModel.getFieldName()+"#\r\n");
				sb.append("    </isNotEmpty>\r\n");
			}
		}
		sb.append("</sql>");
		return sb.toString();
	}
	
	/**
	 * 对象结果映射
	 * @param clazz
	 * @return
	 */
	public static String genResultMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){
		StringBuffer sb = new StringBuffer();
		sb.append("<resultMap id =\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_rm\" class =\""+clazz.getSimpleName().toUpperCase()+"\">\r\n");
		for (ColumnModel columnModel : columnModelList) {
			sb.append("   <result property=\""+columnModel.getFieldName()+"\" column=\""+columnModel.getColumnName()+"\"></result>\r\n");
		}
		sb.append("</resultMap>");
		return sb.toString();
	}
	
	/**
	 * 生成插入语句
	 * @param clazz
	 * @param tableName
	 * @return
	 */
	public static String genInsertMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){
		StringBuffer sb = new StringBuffer();
		sb.append("<insert id = \"save"+StringUtils.toFirstCharUpCase(clazz.getSimpleName())+"\" parameterClass=\""+clazz.getSimpleName().toUpperCase()+"\">\r\n");
		sb.append("  insert into "+tableName+"(\r\n");
		for (ColumnModel columnModel : columnModelList) {
			if(!columnModel.getColumnName().contains("ID_")){
				sb.append("    "+columnModel.getColumnName()+",\r\n");
			}
		}
		sb.deleteCharAt(sb.lastIndexOf(","));
		sb.append("  )  ");
		sb.append("values(\r\n");
		for (ColumnModel columnModel : columnModelList) {
			if(!columnModel.getColumnName().contains("ID_")){
				sb.append("    #"+columnModel.getFieldName()+"#,\r\n");
			}
		}
		sb.deleteCharAt(sb.lastIndexOf(","));
		sb.append("  )\r\n");
		sb.append("</insert>");
		return sb.toString();
	}
	
	/**
	 * 生成更新语句
	 * @param clazz
	 * @param tableName
	 * @return
	 */
	public static String genUpdateMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){
		StringBuffer sb = new StringBuffer();
		sb.append("<update id=\"update"+StringUtils.toFirstCharUpCase(clazz.getSimpleName())+"\" parameterClass=\""+clazz.getSimpleName().toUpperCase()+"\">\r\n");
		sb.append("  update "+tableName+" set\r\n");
		for (ColumnModel columnModel : columnModelList) {
			if(!columnModel.getColumnName().contains("ID_")){
				sb.append("    <isNotEmpty property =\""+columnModel.getFieldName()+"\" prepend=\",\">\r\n");
				sb.append("       "+columnModel.getColumnName()+"=#"+columnModel.getFieldName()+"#\r\n");
				sb.append("    </isNotEmpty>\r\n");
			}
		}
		sb.deleteCharAt(sb.lastIndexOf(","));
		sb.append("  where 1=1 \r\n");
		sb.append(" <include refid=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\"/> \r\n");
		sb.append("</update>");
		return sb.toString();
	}
	
	/**
	 * 生成更新语句
	 * @param clazz
	 * @param tableName
	 * @return
	 */
	public static String genSelectMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){
		StringBuffer sb = new StringBuffer();
		sb.append("<select id=\"query"+clazz.getSimpleName()+"\" parameterClass=\"java.util.HashMap\" resultMap=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_rm\">\">\r\n");
		sb.append("  select \r\n");
		for (ColumnModel columnModel : columnModelList) {
			if(!columnModel.getColumnName().contains("ID_")){
				sb.append("     "+columnModel.getColumnName()+",\r\n");
			}
		}
		sb.deleteCharAt(sb.lastIndexOf(","));
		sb.append("  from "+tableName+" \r\n");
		sb.append("  where 1=1 \r\n");
		sb.append("  <include refid=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\"/> \r\n");
		sb.append("</select>");
		return sb.toString();
	}
	
	/**
	 * 主方法
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			String tableName = "wealth_product_info";
			List<ColumnModel> columnModelList = JdbcUtil.getTableStructure(tableName);
			Class clazz = Class.forName("com.pingan.bean.ProductInfo");
			System.out.println(genObjectTypeAlias(clazz));
			System.out.println(genWhereSql(columnModelList,clazz,tableName));
			System.out.println(genResultMapper(columnModelList,clazz,tableName));
			System.out.println(genUpdateMapper(columnModelList,clazz,tableName));
			System.out.println(genSelectMapper(columnModelList,clazz,tableName));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

}

 4、String工具类

package com.pingan.util;

public class StringUtils extends org.apache.commons.lang.StringUtils{
	
	/**
	 * 将数据库字段转换成bean属性
	 * @param columnName
	 * @return
	 */
	public static String getFieldName(String columnName) {
		char[]  columnCharArr = columnName.toLowerCase().toCharArray();
		StringBuffer sb = new StringBuffer();
		int ad = -1;
		for (int i = 0; i < columnCharArr.length; i++) {
			  char cur = columnCharArr[i];
			  if(cur=='_'){
				  ad = i;
			  }else{
				  if((ad+1)==i&&ad!=-1){
					  sb.append(Character.toUpperCase(cur));
				  }else{
					  sb.append(cur);
				  }
				  ad=-1;
			  }
		}
		return sb.toString();
	}
	
	/**
	 * 将首字母变大写
	 * @param str
	 * @return
	 */
	public static String toFirstCharUpCase(String str){
		char[]  columnCharArr = str.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < columnCharArr.length; i++) {
			  char cur = columnCharArr[i];
			  if(i==0){
				  sb.append(Character.toUpperCase(cur));
			  }else{
				  sb.append(cur);
			  }
		}
		return sb.toString();
	}
	
	/**
	 * 将首字母变小写
	 * @param str
	 * @return
	 */
	public static String toFirstCharLowCase(String str){
		char[]  columnCharArr = str.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < columnCharArr.length; i++) {
			  char cur = columnCharArr[i];
			  if(i==0){
				  sb.append(Character.toLowerCase(cur));
			  }else{
				  sb.append(cur);
			  }
		}
		return sb.toString();
	}
}

 

 

其它的类可参数我前面的文章,谢谢

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics