`
json20080301
  • 浏览: 166200 次
  • 性别: 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
分享到:
评论

相关推荐

    c# 多层架构代码生成器

    C#多层架构代码生成器是一款实用的开发辅助工具,专为C#编程语言设计,旨在简化和自动化在多层架构项目中的代码编写工作。多层架构是一种常见的软件设计模式,通常包括表现层(Presentation Layer)、业务逻辑层...

    C#做的简单的代码生成器源码

    总的来说,虽然这个代码生成器可能并不完善,但它揭示了代码生成的基本思路和实现方式,对于理解和实践代码生成技术有着积极的引导作用。开发者可以根据自己的需求,对这个源码进行改造和扩展,使其更符合实际项目的...

    中间代码生成器的设计(实验报告+代码+运行结果) 编译方法

    中间代码生成器的设计,作为编译方法中的关键环节,将高级语言编写的源程序转换为便于计算机理解和执行的中间表示形式。四元式作为一种经典且普遍采用的中间表示形式,是将源程序表达式转化为一系列操作步骤的桥梁。...

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

    本文将深入探讨快速开发网站的思路和步骤,并重点介绍如何使用"动软代码生成器2.1.6"这一工具,以提高开发效率。 一、快速开发网站的思路 1. 规划与需求分析:在开始任何开发工作之前,明确网站的目标、功能和用户...

    Migcode代码生成器使用说明书

    Migcode代码生成器是一款由彭仁夔及其团队开发的专业工具,旨在为开发者提供高效便捷的代码生成服务。该工具支持从数据模型(如数据库、PDM等)自动生成可直接运行的SSH(Spring+Struts+Hibernate)项目,包括初始化...

    c#写的源代码生成器源码文件及附有设计说明书

    总结,这款C#代码生成器不仅是一个工具,更是一种提高开发效率的策略。通过理解和掌握其设计思路和使用方法,开发者可以在项目中有效地应用,从而节约时间,提升开发效率,更好地应对复杂的业务需求。同时,设计说明...

    C# Devexpress 代码生成器

    在本项目中,开发者尝试利用DevExpress的组件来构建一个代码生成工具,以提高开发效率和代码一致性。 在描述中提到,该工具的界面设计部分来源于网络,这表明开发者可能参考了开源项目或在线资源来构建用户界面。...

    自己编写的简易的代码生成器

    "自己编写的简易的代码生成器" 是一个个人开发的代码自动生成工具,它基于C#编程语言进行开发。这样的工具通常旨在帮助程序员快速生成常见的代码结构,减少手动编写重复代码的工作量,提高开发效率。 【描述详解】 ...

    存储过程和c#代码生成器完整源码

    存储过程和C#代码生成器是一种工具,它能够自动化创建数据库的存储过程和与之对应的C#代码,以实现数据库操作的高效性和一致性。在软件开发中,存储过程是预编译的SQL语句集合,它们存储在数据库服务器中,可以被多...

    毕业设计-java代码生成器

    【标题】"毕业设计-java代码生成器"是一个基于Java编程语言的工具,旨在简化软件开发过程中重复性的编码工作。这个工具通常被称为代码自动生成器,它能够根据预先定义的模板或者数据库模型,自动创建出符合特定规范...

    编译原理中间代码生成实验报告——完整版

    本实验报告主要围绕算术表达式的中间代码生成展开,旨在让学生深入理解算术表达式的语法分析原理,并能实现相应的中间代码生成。 一、实验目的 实验的主要目的是让学习者掌握算术表达式的语法分析和中间代码生成的...

    代码生成工具原代码

    总结来说,"代码生成工具原代码"是一个用于自动化编程任务的工具,它基于某种编程语言实现,并通过模板或规则来生成代码。通过阅读博客文章和分析提供的“createTool”源代码,开发者可以学习到工具的设计思路、实现...

    C#代码生成器源码-基于Spring.NET架构

    代码生成器会根据这些信息自动生成C#代码,包括但不限于实体类、接口、实现类、数据访问组件、业务逻辑组件等。此外,生成的配置文件通常包括Spring.NET的配置XML,以便在运行时加载并管理这些组件。总的来说,这款...

    代码生成器-用于软著申请

    【代码生成器——软著申请的强大工具】 在软件开发领域,软件著作权(简称“软著”)是一项重要的知识产权,它保护了开发者对于原创软件作品的所有权。为了申请软著,开发者通常需要提供源代码作为证明材料,这一...

    快递单代码生成器

    快递单代码生成器是一款实用工具,主要用于自动化生成快递单的打印代码,特别是在电子商务和物流行业中,这样的工具可以极大地提高工作效率。程序的核心理念是提供一种模板化的思路,帮助开发者快速构建出能够自动...

    动软.Net代码生成器源码.rar

    动软.Net代码生成器就是这样一款工具,它可以帮助开发者快速生成符合特定需求的基础代码,从而节省大量的编码时间。本文将深入探讨动软.Net代码生成器的源码,揭示其背后的原理和设计思路,以及与C#编程语言的紧密...

    毕业设计-aspnet代码生成器v

    这为学习者提供了深入研究的机会,可以了解代码生成器的设计思路、架构和实现细节。通过分析和修改源代码,学生能够提升对ASP.NET和.NET窗体类的理解,同时掌握软件开发的实践技巧。 【标签】".net窗体类"表明这个...

    实验五_用语法制导方式生成中间代码生成器[收集].pdf

    3. 中间代码生成器的实现:使用goto.c函数实现符号表、回填、创建节点、定义节点属性等功能。 三、实验思路 实验思路主要包括以下几个步骤: 1. 编写goto.c函数,该函数实现符号表、回填、创建节点、定义节点属性...

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

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

Global site tag (gtag.js) - Google Analytics