`
json20080301
  • 浏览: 162486 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

代码生成工具的实现思路

阅读更多
1.利用 JDBC中的 ResultSetMetaData 和 DatabaseMetaData  来读取表字段的相关信息

DataSource dataSource = context.getBean("dataSource", DataSource.class);
		Connection conn = dataSource.getConnection();
		List<Column> lsColumns = new ArrayList<Column>(10);
		PreparedStatement stmt = conn.prepareStatement("select *  from "+tableName+" where 1=0 ");
		ResultSet resultSet = stmt.executeQuery();
		ResultSetMetaData rsmd = resultSet.getMetaData();
		int n = rsmd.getColumnCount();
		for (int i = 1; i <= n; i++)
		{
			String colName = rsmd.getColumnName(i);
			String fieldName = StringUtil.toBeanPatternStr(colName);
			Column column = new Column();
			column.setName(colName) ;
			column.setJavaName(fieldName) ;
			column.setDataType(rsmd.getColumnClassName(i));
			column.setPrecision(String.valueOf(rsmd.getPrecision(i)));
			column.setScale( String.valueOf(rsmd.getScale(i)) );
			column.setLength( String.valueOf(rsmd.getColumnDisplaySize(i)));
			column.setNullable(String.valueOf("1".equals(rsmd.isNullable(i))));

//获取列注释
			DatabaseMetaData dbmd = conn.getMetaData();
			ResultSet rs = dbmd.getColumns(null, null, tableName, null);
			while (rs.next()) {
				if (colName.equals(rs.getString("COLUMN_NAME")))
					column.setComments(rs.getString("REMARKS"));
			}
			//获取主键列
			ResultSet rs2 = dbmd.getPrimaryKeys(null, null, tableName);
			while (rs2.next()) {
				if (colName.equals(rs2.getString("COLUMN_NAME")))
					column.setColumnKey("TRUE");	
			}


2.讲表字段相关信息放入模板引擎的上下文中,根据模板内容生成JAVA文件;

	Velocity.addProperty("file.resource.loader.path", getClassPath()
				+ tmplDir);
		Template template = Velocity.getTemplate(tmplFile, encoding);
		VelocityContext tmplContext = new VelocityContext(context);
		FileUtil.createFile(absolutePath);
		PrintWriter writer = new PrintWriter(
				new FileOutputStream(absolutePath), true);
		template.merge(tmplContext, writer);
		writer.flush();
		writer.close();


3.tmplFile模板文件的内容如下:

 #if($pkResult.size()>1)
     @EmbeddedId
     #else
     @Id
     @Column(name = "$pkResult.get(0).name"  )
     @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="${TABLE_NAME}_SEQ") 
     #end
     private ${keyType}  ${keyVar} ;

     #foreach($prop in $columnResult)
        #set ($fieldName  = ${prop.javaName} )
        #set ($fieldType  = $prop.dataType )
        @Column(name = "${prop.name}" )
    	private $fieldType $fieldName ;
	
     #end


     public  ${keyType} get${KeyFieldUpper} () {
		return ${keyVar};
     }

     public void set${KeyFieldUpper} (${keyType}  ${keyVar}) {
		this.${keyVar} = ${keyVar};         
      }

     #foreach($prop in $columnResult)
        #set ($fieldName  = ${prop.javaName} )
        #set ($fieldType  =  $prop.dataType )
        #set ($innerFieldUpper  = $stringUtil.capitalize($fieldName) )
	public $fieldType get$innerFieldUpper () {
		return $fieldName;
	}
	public void set$innerFieldUpper ($fieldType $fieldName) {
		this.$fieldName = $fieldName;		
	}
     #end
  • 大小: 65.1 KB
分享到:
评论

相关推荐

    扩展MyBatisPlus代码生成器实现自定义源码生成,可生成前端页面、vo对象、dto对象等代码

    MyBatisPlus自带了一个代码生成器mybatis-plus-generator,可基于数据库库表,结合模板技术,自动生成程序源码,不过默认情况下,只支持Entity、Mapper、Service、Controller这些层次。如果想生成未预置的代码,如vo...

    c# 多层架构代码生成器

    c#多层架构代码生成器 自己做的一个小工具,蛮好用的

    快速开发网站思路和步骤(附带动软代码生成器2.1.6)

    教你如何使用动软代码生成器(基本上包涵了常用功能)

    基于模板的代码生成器LKGenerator1.1.0_x86

    实现思路:加载实体类的class文件到classLoader中,读取实体类的属性和注解,将类名、属性字段名、注解三者与模版进行结合生成最终的代码。 1.配置 (1)配置模版路径,这个配置可以配置用于生成代码的velocity模版...

    根据数据库表自动生成实体类的源代码

    用一个根据数据库表自动生成实体类代码的案例讲解了代码生成器的核心思路,相关博客地址:https://blog.csdn.net/qq_31142553/article/details/93673384。

    JEECG代码生成器[J2EE Code Generation]

    JEECG代码生成器,有效的解决了信息孤岛的问题,另外,生成统一的代码,统一的规范,统一的设计思路,使您能在这个统一的平台上快速开发出高效高质量的代码。 特点: 可以帮助初学者快速入门,最大限度提高JAVA...

    velocity 入门文档及应用源码,很适合做自动代码生成

    入门文档及应用源码,很适合做自动代码生成 包括:Velocity的中文指南\ velocity中文手册\ \基于Ant+Velocity的简单代码生成器的思路与实现

    Simulink仿真及代码生成技术入门到精通

    该书详细介绍了基于MATLAB/Simulink的自动代码生成技术,由浅入深的描述了MATLAB工具使用方法,思路清晰,内容详实。

    基于模板的代码生成器LKGenerator1.1.0_x64

    代码生成工具使用前置条件:系统安装JDK并配置JAVA_HOME环境变量。 功能: 一、数据库生成实体类. 1.配置 (1)本工具提供了3中连接数据库的方式,分别是:MySql、Oracle、SqlServer,在界面上给出连接示例,方便...

    STM32代码自动生成工具

    自己开始学STM32时经常使用的,无限制使用版,配置出实现想要的功能很快,免了去查手册,绕过了很多坑,而且用这个感觉思路更清楚

    快递单代码生成器

    本程序只是给编写此类程序一个思路,主要是创建一个标签,生成对应的html代码,在web打印 时会方便定位。

    代码生成器的设计与实现.zip

    同时增加自己对不同方面知识的了解,为后续的创作提供一定的设计思路和设计启发 , 并且可以快速完成相关题目设计,节约大量时间精力,也为后续的课题创作 提供有力的理论依据、实验依据和设计依据,例如提供一些...

    自动生成代码工具配置文件及技术点详解

    通过以上所阐述技能点,完全能工读懂代码,再次基础上完成二次开发,实现自己的代码生成器。 如果不想自己生成代码,也可用现有代码,如果想让我帮你实现接口,可留言告知我,我也是很乐意代劳的哦。 开发初衷 ...

    基于vue可视化拖拽编辑,页面生成工具

    基于vue可视化拖拽编辑,页面生成工具。提升前端开发效率,可集成至移动端项目作为通过定义 JSON 直接生成 UI 界面。

    J2EE智能开发平台JEECG代码生成器

    JAVA编程有很多重复机械代码, 生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑, 从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路...

    动码生成器

    说了动软代码生成器,同时也见过很多其他类似的工具,不过大都是英文的,以前只是看看,没有做过项目,也不想去使用。现在找工作好难,不能不多学点东西,所以就做了个东西,顺便把一些东西好好研究下,一方面锻炼...

    Android-ArbitraryGen 是一个支持混合式代码生成器

    ArbitraryGen 是一个支持混合式代码生成器。包括三种模式: 普通代码生成模式,直接通过在生成代码的代码中指定生成代码的样式和和模板;(思路简单,效率高,但扩展性和灵活性没那么高) 脚本引擎模式,模板是通过...

    一款基于代码生成器的J2EE智能开发框架--JEECG

    JAVA编程有很多重复机械代码, 生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑, 从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路...

    伪随机密码生成器 源代码 密码管家

    和同学设计了一个生成伪随机密码的思路,与大家分享。 设计宗旨 1,不同网站不同账号对应的注册密码不同; 2,只需记住一个较长的种子; 3,一个网站数据泄露,不会被推出其它网站密码。 由1和2得出:密码是{...

Global site tag (gtag.js) - Google Analytics