当前位置: 移动技术网 > IT编程>开发语言>Java > java手写SORM框架(根据表结构生成java类源代码)

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

2020年08月10日  | 移动技术网IT编程  | 我要评论
继续添加源代码

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网