java手写SORM框架(根据表结构生成java类源代码)
java文件(源代码)常用的操作
package com.han.sorm.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.han.sorm.bean.ColumnInfo;
import com.han.sorm.bean.JavaFieldGetSet;
import com.han.sorm.bean.TableInfo;
import com.han.sorm.core.DBManager;
import com.han.sorm.core.MySqlTypeConvertor;
import com.han.sorm.core.TableContext;
import com.han.sorm.core.TypeConvertor;
/**
*封装了生成java文件(源代码)常用的操作
JavaFileUtils–>java文件的反射
/
public class JavaFileUtils {
/
* 根据字段信息生成java属性信息,如varchar username–>private String username;以及相应的get与set方法源码
* @param column 字段信息
* @param convertor 类型转换器
* @return 返回java属性和set与get方法源码
*/
public static JavaFieldGetSet createFieldGetSetSRC(ColumnInfo column,TypeConvertor convertor){
//先生成属性;获取java类型
JavaFieldGetSet jfgs = new JavaFieldGetSet();//源码
String javaFieldType = convertor.databaseType2JavaType(column.getDataType());
//添加属性信息
jfgs.setFieldInfo("\tprivate “+javaFieldType+” “+column.getName()+”;\n");
//生成get方法的源代码
//需要拼接get;以get方法为例,源码格式public String getUsername(){return username;}
StringBuilder getSrc = new StringBuilder();//方便拼接字符串
//拼接第一行 ;
getSrc.append("\tpublic "+javaFieldType+" get"+StringUtils.firstChar2UpperCase(column.getName())+"(){\n");//\t缩进;\n换行
//拼接第二行
getSrc.append("\t\treturn "+column.getName()+";\n");//缩进2次即\t\t
//拼接第三行
getSrc.append("\t}\n");
//存放进get信息里面
jfgs.setGetInfo(getSrc.toString());//生成get源码
//生成set方法的源代码
//需要拼接set;以set方法为例,源码格式public void setUsername(String username){this.username=username;}
StringBuilder setSrc = new StringBuilder();//方便拼接字符串
//拼接第一行 ;
setSrc.append("\tpublic void set"+StringUtils.firstChar2UpperCase(column.getName())+"(");//\t缩进;\n换行
setSrc.append(javaFieldType+" "+column.getName()+"){\n");
//拼接第二行
setSrc.append("\t\tthis."+column.getName()+"="+column.getName()+";\n");//缩进2次即\t\t
//拼接第三行
setSrc.append("\t}\n");
//存放进get信息里面
jfgs.setSetInfo(setSrc.toString());//生成set源码
return jfgs;
}
/**
* 根据表信息生成java类的源代码
* @param tableInfo 表信息
* @param convertor 数据类型转化器
* @return 返回java类的源代码
*/
public static String createJavaSrc(TableInfo tableInfo,TypeConvertor convertor){
//获取字段
Map<String, ColumnInfo> columns = tableInfo.getColumns();
//属性列表
List<JavaFieldGetSet> javaFields = new ArrayList<JavaFieldGetSet>();
//遍历属性
for(ColumnInfo c:columns.values()){
//在容器存放内容
javaFields.add(createFieldGetSetSRC(c,convertor));//传入convertor(转化器)内容;生成了JavaFieldGetSet方法
}
StringBuilder src = new StringBuilder();
//生成package语句 生成第一行 即:包名
src.append("package "+DBManager.getConf().getPoPackage()+";\n\n");
//生成import语句
src.append("import java.sql.*;\n");
src.append("import java.util.*;\n\n");
//生成类声明语句
src.append("public class "+StringUtils.firstChar2UpperCase(tableInfo.getTname())+" {\n\n");
//StringUtils.firstChar2UpperCase(tableInfo.getTname())表名加类名
//生成属性列表
for(JavaFieldGetSet f : javaFields){
src.append(f.getFieldInfo());
}
src.append("\n\n");
//生成get方法列表
for(JavaFieldGetSet f : javaFields){
src.append(f.getGetInfo());
}
//生成set方法列表
for(JavaFieldGetSet f : javaFields){
src.append(f.getSetInfo());
}
//还可以生成其他内容列表,如:空构造器
src.append("\t"+"public "+
StringUtils.firstChar2UpperCase(tableInfo.getTname())+"(){\n");
src.append("\t\t"+"super();\n");
src.append("\t"+"}\n");
//生成类结束
src.append("}\n");
System.out.println(src);//打印
return src.toString();
}
//测试当前代码用
public static void main(String[] args) {
/*System.out.println("=======转为字符串=====");
ColumnInfo ci = new ColumnInfo("username","varchar",0);
//调用
JavaFieldGetSet f = createFieldGetSetSRC(ci, new MySqlTypeConvertor());//转换器
System.out.println(f);
System.out.println("=======转为int=====");
ColumnInfo ci2 = new ColumnInfo("id","int",0);//转为字符串
//调用
JavaFieldGetSet f2 = createFieldGetSetSRC(ci2, new MySqlTypeConvertor());//转换器
System.out.println(f2);
*/
Map<String,TableInfo> map = TableContext.tables;
TableInfo t = map.get("emp");
createJavaSrc(t,new MySqlTypeConvertor());
}
}
//-----------------测试结果------------------------------------
本文地址:https://blog.csdn.net/weixin_45339692/article/details/107885901