使用XML + XSLT进行实体类代码生成 (一)
已经有一阵子没能安静下来研究代码,这两天好不容易有点空。赶快将最近的一些想法进行论证和验证一下。
背景
由于前一阵子有个项目,需要用到将数据库里面的表生成实体类。虽然不是什么很麻烦的事情,但是也经不起量大啊!由于没有找到一个适合的代码生成工具,后来没办法只好写了一段程序,将数据库的字段用字符串拼起来组成要用的类然后输出。办法随笨了点,但也还实用。但是太过死板,不方便修改。后来想用XML + XLST可以实现用模板来定制这些类,这样应该好多了。于是,这两天就简单的写了个程序,结果感觉还不错。
一, 获取数据库中的字段和数据类型
我这里是用了两个系统存储过程sp_columns和sp_pkeys来获取的,当然你也可以使用sp_help来获取这些值。
二,将获取的列和数据类型转成XML数据。
只需要写一段数据库访问程序调用系统存储过程sp_columns和sp_pkeys并将你要的生成代码的数据表的名字传给它们的参数@table_name就可以了。
部分代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click2
Dim stbld As New StringBuilder3
Dim stbldcol As New StringBuilder4
Dim stbldpkey As New StringBuilder5

6
Dim tblo As New tableoperator7
Dim ds As DataSet8
Dim i As Integer9

10
'11
ds = tblo.getTableColumns()12

13
'field14
stbld.Append("<?xml version=""1.0"" encoding=""utf-8"" ?>" + vbCrLf)15
stbld.Append("<Schema>" + vbCrLf)16
stbld.Append(Space(4) + "<TableName value=""" + tblo.tablename + """ />" + vbCrLf)17
stbld.Append(Space(4) + "<FIELDS>" + vbCrLf)18
For i = 0 To ds.Tables(0).Rows.Count - 119
stbld.Append(Space(8) + "<FIELD Name=""" + ds.Tables(0).Rows(i).Item("COLUMN_NAME") + """ Type = ""System.String""/>" + vbCrLf)20
Next21
stbld.Append(Space(4) + "</FIELDS>" + vbCrLf)22

23
'query24
stbldcol.Append(Space(4) + "<Query>" + vbCrLf)25
For i = 0 To ds.Tables(0).Rows.Count - 126
stbldcol.Append(Space(8) + "<Command Name=""SelectBy" + ds.Tables(0).Rows(i).Item("COLUMN_NAME") + """ ReturnMode = ""Multiple"">" + vbCrLf)27
stbldcol.Append(Space(12) + "<FIELD Name=""" + ds.Tables(0).Rows(i).Item("COLUMN_NAME") + """ Type = ""System.String""/>" + vbCrLf)28
stbldcol.Append(Space(8) + "</Command>" + vbCrLf)29
Next30
stbldcol.Append(Space(4) + "</Query>" + vbCrLf)31

32
ds.Clear()33
ds = tblo.getPrimaryKeys34
'primary keys35
stbldpkey.Append(Space(4) + "<PrimaryKeys>" + vbCrLf)36
For i = 0 To ds.Tables(0).Rows.Count - 137
stbldpkey.Append(Space(8) + "<FIELD Name=""" + ds.Tables(0).Rows(i).Item("COLUMN_NAME") + """ Type = ""System.String""/>" + vbCrLf)38
Next39
stbldpkey.Append(Space(4) + "</PrimaryKeys>" + vbCrLf)40

41
stbld.Append(stbldpkey)42
stbld.Append(stbldcol)43

44
stbld.Append("</Schema>" + vbCrLf)45
TextBox1.Text = stbld.ToString46
End Sub(注:这里为了显示xml方便所以生成了一个完整的xml文件,但在后面使用的时候请将第14,15,44行注释掉)
当程序运行时,生成的的XML数据是这样就可以了,当然你也可以根据自己的需要生成自己需要的格式:
其中:
<FIELDS></FIELDS>部分会生成实体类的属性;
<PrimaryKeys></PrimaryKeys>部分会用在实体类的New函数中;
<Query></Query>部分用来配置将来要生成DO代码的增删改以及查询用的函数。
<Command><Command>里面的FIELD用作增删改查询中需要的参数和参数对应的字段。
-- 未完带续

浙公网安备 33010602011771号