`

ruby生成java文件的工具

    博客分类:
  • ruby
阅读更多
java开发的很多代码都是可以通过工具来生成的,虽然eclipse在这方面有些帮助,但其能力还是太有限,在本人学习ruby期间发现使用ruby来写个自动化的生成工具确实是个很不错的主意。由于公司使用的oracle+ibatis的持久层开发,所以本人开始的时间只是想生成一下ibatis的sqlmap的XML文件就可以了,但后来一想,其实service、dao、controller甚至JSP都可以完成大部分的有效生成。但即便如此,这个工具的代码量还是很小的,几乎是相当的容易。
由于本人主要是做JAVA的,所以ruby这个东西过段时间就忘了,可能再到以后再要想搞这么个工具,又得从头再来,所以决定把大体思路写下来。
其中涉及到的东西主要有几下几个:
1.读取配置文件。由于windows下的tcl/tk非常的难用(是本人目前用过的最难用的API之一),所以觉得还是用配置文件算了。XML不错,但结构有点复杂,所以本人使用的是yaml格式配置文件,感觉其与json有点相似。大体格式如下:
#tnsnames.ora, yaml要求冒号后面要有空格,仅用于测试数据库
tns : ORCL181
table : PAY_WAY_COL
domain_pack: com 

由于yaml是ruby标准库自带的,所以不需要再安装gem,只要在使用时用require引入即可。
2.连接数据库组件。连接oracle时,除了需要dbi以外,还需要oci8这个gem,因此这个得自己手动安装。
3.将ruby程序打包成exe文件,这个需要个叫exerb的组件,其用法可见下面文章:
http://jimmykuu.iteye.com/blog/51526
4.生成java需要的技术。生成xml文件是可以使用rexml,这个在本人以前的博客中也讲过,生成java文件时,除了可以使用普通的puts "xxxx"输出到文件以外,还可以使用erb模版技术,本人也两种都试了下,感觉erb模版方法可能更好一些。

除了上面这些问题外,就剩下写代码了,下面贴出生成文件的主要结构代码:
=begin
dao service controller domain sqlmap ...
=end
$LOAD_PATH.unshift(File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.dirname(__FILE__))

require 'dbi'
require 'oci8'
require "yaml"

require "sqlmap"
require "domain"
require "dao_service"
require "xml_service"
require "controller"
require "bean_util"
require "list"
require "form_jsp"

class CrudModel

	def initialize(tns,table,dpack,crud_pack,author)
		@tns = tns
		@table=table
		@clazz=BeanUtils.class_name(table)
		@name=BeanUtils.bean_name(table)
		#domain package
		@dpack=dpack
		#service dao controller package
		@crud_pack=crud_pack
		@author=author
		
		DBI.connect("DBI:OCI8:#{@tns}","qaa","qaajkwin") do |dbh|
			#查询表的主键
			rs_id = dbh.execute("select ucc.column_name as ID from user_cons_columns ucc, user_constraints uc
					where ucc.constraint_name = uc.constraint_name
					and uc.constraint_type = 'P' and uc.table_name = upper('#{@table}')")
			
			@primary_key = rs_id.fetch_hash["ID"]
			@id=BeanUtils.field_to_attr(@primary_key)
			
			#获取表的基本信息
			rs = dbh.execute("select * from "+@table)
			rs_seq = dbh.execute("select count(*) as seqcount from all_sequences 
				where sequence_name='#{@table}_SEQUENCE'")
		
			sqlmap = SqlMapXml.new(rs_seq,rs,@table,@clazz,@name,@dpack,@primary_key,@id)
			sqlmap.write()

			domain = Domain.new(rs,@table,@clazz,@dpack)
			domain.write()
	
			dao_service = DaoService.new(@clazz,@name,@dpack,@crud_pack,@author)
			dao_service.write()
			
			xml_service = XmlService.new(@clazz,@name,@crud_pack)
			xml_service.write()
	
			controller = Controller.new(@clazz,@name,@id,@dpack,@crud_pack,@author)
			controller.write()
			
			#获取表的列注释
			rs_comments = dbh.execute("select column_name as columnName,comments 
				from user_col_comments where table_name=upper('#{@table}')")
			
			column_comment = Hash.new
			while(column = rs_comments.fetch_hash) do
				column_comment.store(column["COLUMNNAME"],column["COMMENTS"])
			end
			
			#ListView.new(column_comment,@clazz,@name,@id,@dpack).write()
			
			FormJsp.new(column_comment,@name,@id).write()

		end
	end

end

config = YAML.load_file("database.yaml")
CrudModel.new(config["tns"],config["table"],config["domain_pack"],config["crud_pack"],config["author"])



这个文件是生成java代码的主文件,具体的生成代码在相关的模块里面,总体来说,用ruby在做自动生成工具相当的方便,而且ruby本身的设计也相当的优秀。虽然本人以前也学过一段时间的rails,可惜只做过例子,并没有做出什么有实际帮助的东西来。但个人对ruby与rails评价还是很高的,都是些很不错的东西,希望以后能再有机会用到它们。
另外,本人开发使用的scite这个工具。
分享到:
评论

相关推荐

    JavaRb:将 Java 文件转换为 Ruby 文件的工具

    将 Java 文件转换为 Ruby 文件的工具。 这是第一个版本。 只翻译下一个功能: 包声明。 类声明。 属性类。 有或没有返回的方法。 相等运算符和简单的说明。 调用方法。 toString 方法。 建设者。 印刷。 ...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java开源包11

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包4

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包6

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包9

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包101

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包5

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包8

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包10

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包1

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包3

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包2

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    java开源包7

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    Java资源包01

    Java文件上传组件 COS FAT文件系统读写类库 fat32-lib fat32-lib 是一个用来读写 FAT 16/32 格式文件系统的纯 Java 类库(纯的)。 Eclipse的HTML格式化插件 Eclipse Tidy Eclipse HTML Tidy 是一款 Eclipse 的...

    FCG 架构代码生成器

    FCG是款基于模板的代码生成工具,可以生成任何文本语言代码:java,.C#, php,ruby等等,注意是任何语言,没有限制. FCG是为我们可爱的程序员设计的一款开发工具,主要目的是帮助大家构造符合自己系统架构需求的代码...

    syft:用于从容器映像和文件系统生成软件物料清单的 CLI 工具和库

    支持来自各种生态系统的包和库(APK、DEB、RPM、Ruby Bundles、Python Wheel/Egg/requirements.txt、JavaScript NPM/Yarn、Java JAR/EAR/WAR、Jenkins 插件 JPI/HPI、Go 模块) Linux 发行版识别(支持 Alpine、...

Global site tag (gtag.js) - Google Analytics