欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java手写SORM框架(根据表结构生成java类源代码)

程序员文章站 2022-04-15 17:56:20
继续添加源代码...

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

}
//-----------------测试结果------------------------------------
java手写SORM框架(根据表结构生成java类源代码)
java手写SORM框架(根据表结构生成java类源代码)

本文地址:https://blog.csdn.net/weixin_45339692/article/details/107885901

相关标签: java SORM框架