系统代码生成工具源码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace Tools
{
    public partial class FormHome : Form
    {
        protected int num = 0;
        protected int i = 0;
        private string filepath = "";
        private string model = "";
        protected string data = "abcdefghi";
        public FormHome()
        {
            InitializeComponent();
            this.noAuto.Visible = true;
        }
        public DataTable GetTable(string sql)
        {
            DataSet ds = new DataSet();
            try
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = "initial catalog=" + this.tbdata.Text.TrimEnd().ToString() + ";data source=.\\sqlserver2005;user id=" + this.tbuser.Text.TrimEnd() + ";password=" + this.tbpass.Text.TrimEnd();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = sql;
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;

                da.Fill(ds);

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return ds.Tables[0];
        }

        private void BtChange_Click(object sender, EventArgs e)
        {
            StringBuilder tempChangeData = new StringBuilder();
            string tempBeforeData = this.RtbBefore.Text;
            string[] tempLines = tempBeforeData.Split('\n');
            string[] tempSingleLine = null;
            foreach (string temp in tempLines)
            {            
                    tempSingleLine = temp.Split('=');
                     if (tempSingleLine.Length==2)
                    tempChangeData.AppendFormat("{0}={1};\n", tempSingleLine[1].Replace(";", ""), tempSingleLine[0].TrimStart().TrimEnd());            
              
            }
            this.RtbAfter.Text = tempChangeData.ToString();
        }

        private void BtClear_Click(object sender, EventArgs e)
        {
            foreach (Control control in this.TpChange.Controls)
            {
                if (control.GetType().ToString() == "System.Windows.Forms.RichTextBox")
                {
                    ((System.Windows.Forms.RichTextBox)control).Text = "";
                }
            }
        }

        private void BtDataCodeMake_Click(object sender, EventArgs e)
        {
            DataTable dt = this.GetTable("select * from sysobjects where xtype in('u','v') order by status desc");
            for (int i = 0; i < dt.Rows.Count - 1; i++)
            {
                string tableBean = Convert.ToString(dt.Rows[i]["name"] ?? "").ToUpper();
                tableBean = tableBean.Length > 1 ? (tableBean.Substring(0, 1).ToUpper() + tableBean.Substring(1).ToLower()) : (tableBean.ToUpper());
                DataTable dtt = this.GetTable("select * from [" + Convert.ToString(dt.Rows[i]["name"]) + "]");
                System.Text.StringBuilder sbshu = new StringBuilder("using System;").Append(System.Environment.NewLine).Append("using System.Collections.Generic;").Append(System.Environment.NewLine).Append("using System.Text;").Append(System.Environment.NewLine).Append("using System.Data;").Append(Environment.NewLine).Append("using System.Data.SqlClient;").Append(System.Environment.NewLine).Append("").Append(System.Environment.NewLine).Append("namespace ").Append(this.tbNamespace.Text.Trim()).Append(System.Environment.NewLine).Append("{").Append(System.Environment.NewLine);

                System.Text.StringBuilder sbset = new StringBuilder("");

                System.Text.StringBuilder sbbean = new StringBuilder("public " + tableBean + " SelectById(){" + System.Environment.NewLine + tableBean + "  " + tableBean.ToLower().ToString() + " = new " + tableBean + "();" + System.Environment.NewLine + "");
                sbbean.Append("string sql = \"select * from " + tableBean + " where " + dtt.Columns[0].ColumnName.ToString() + "=@" + dtt.Columns[0].ColumnName.ToString() + "\";").Append(Environment.NewLine);
                sbbean.Append("SqlParameter[] pas = {new SqlParameter(\"").Append("@").Append(dtt.Columns[0].ColumnName.ToString()).Append("\"").Append(",").Append(dtt.Columns[0].ColumnName.ToString()).Append(")};").Append(Environment.NewLine);
                sbbean.Append("DataTable dt = db.GetTable(sql,pas);").Append(Environment.NewLine);
                sbbean.Append("  if(dt.Rows.Count>0)").Append(Environment.NewLine).Append("    {").Append(Environment.NewLine);
                //sql前半部分

                StringBuilder sbpas = new StringBuilder("SqlParameter[] pas = {");
                StringBuilder sbadd = new StringBuilder("public bool Add()");
                sbadd.Append("{");
                sbadd.Append(Environment.NewLine);
                sbshu.Append(Environment.NewLine);
                sbshu.Append("public class ");
                sbshu.Append(tableBean);
                sbshu.Append("{");
                sbshu.Append(Environment.NewLine);

                System.Text.StringBuilder sbsqlbefore = new StringBuilder("insert into ").Append(tableBean).Append("(");
                System.Text.StringBuilder sbsqlafter = new StringBuilder(" values(");
                StringBuilder sbupd = new StringBuilder("public bool Update()" + Environment.NewLine + "{" + Environment.NewLine + "string sql =\"update ").Append(tableBean).Append(" set ");
                StringBuilder sbdel = new StringBuilder("public bool Delete()").Append(Environment.NewLine).Append("{").Append("string sql = \"delete ").Append(tableBean).Append(" where ").Append("[").Append(dtt.Columns[0].ColumnName.ToString()).Append("]").Append("=").Append("@").Append(dtt.Columns[0].ColumnName.ToString()).Append("\";").Append(Environment.NewLine);
                StringBuilder sbdelpas = new StringBuilder("SqlParameter[] pas = {");
                StringBuilder sbsel = new StringBuilder("public DataTable Select()").Append(Environment.NewLine).Append("{").Append(Environment.NewLine).Append("DataTable dt = db.GetTable(\"select * from ").Append(tableBean).Append("\")??new DataTable();").Append(Environment.NewLine).Append("return dt;").Append(Environment.NewLine).Append("}");
                //循环字段
                for (int j = 0; j < dtt.Columns.Count; j++)
                {
                    sbshu.Append("private string _" + dtt.Columns[j].ColumnName.ToString() + ";" + System.Environment.NewLine);
                    sbset.Append("public string " + dtt.Columns[j].ColumnName.ToString() + "{set{this._" + dtt.Columns[j].ColumnName.ToString() + "=value;}get{return this._" + dtt.Columns[j].ColumnName.ToString() + ";}}" + System.Environment.NewLine);
                    sbbean.Append("      ").Append(tableBean.ToLower().ToString() + "." + dtt.Columns[j].ColumnName.ToString() + "=Convert.ToString(dt.Rows[0][\"" + dtt.Columns[j].ColumnName.ToString() + "\"]);").Append(System.Environment.NewLine);
                    if (j != 0)
                    {
                        sbsqlbefore.Append(",");
                        sbsqlafter.Append(",");
                    }
                    ///添加
                    sbsqlbefore.Append("[").Append(dtt.Columns[j].ColumnName.ToString()).Append("]");
                    sbsqlafter.Append("@" + dtt.Columns[j].ColumnName.ToString());
                    sbpas.Append("new SqlParameter(\"");
                    sbpas.Append("@");
                    sbpas.Append(dtt.Columns[j].ColumnName.ToString());
                    sbpas.Append("\",");
                    sbpas.Append(dtt.Columns[j].ColumnName.ToString());
                    sbpas.Append(")");
                    if (j < dtt.Columns.Count - 1)
                    {
                        sbpas.Append(",");
                    }
                    ///修改
                    if (j != 0)
                    {
                        sbupd.Append("[").Append(dtt.Columns[j].ColumnName.ToString()).Append("]").Append("=");
                        sbupd.Append("@");
                        sbupd.Append(dtt.Columns[j].ColumnName.ToString());
                        if (j < dtt.Columns.Count - 1)
                        {
                            sbupd.Append(",");
                        }
                    }


                }
                sbpas.Append("};");
                sbsqlbefore.Append(")");
                sbsqlafter.Append(")");
                ///循环字段
                sbadd.Append("string sql = \"").Append(sbsqlbefore.ToString()).Append(sbsqlafter.ToString()).Append("\"").Append(";").Append(Environment.NewLine);
                sbadd.Append(sbpas.ToString()).Append(Environment.NewLine);
                sbadd.Append("return db.GetState(sql,pas);").Append(Environment.NewLine);
                sbadd.Append("}").Append(Environment.NewLine);
                //添加结束
                ///修改
                sbupd.Append(" where ");
                sbupd.Append(dtt.Columns[0].ColumnName.ToString());
                sbupd.Append("=");
                sbupd.Append("@");
                sbupd.Append(dtt.Columns[0].ColumnName.ToString()).Append("\";").Append(Environment.NewLine);
                sbupd.Append(sbpas).Append(Environment.NewLine);
                sbupd.Append("return db.GetState(sql,pas);").Append(Environment.NewLine);
                sbupd.Append("}").Append(Environment.NewLine);
                ///删除
                sbdelpas.Append("new SqlParameter(\"").Append("@").Append(dtt.Columns[0].ColumnName.ToString()).Append("\"").Append(",").Append(dtt.Columns[0].ColumnName.ToString()).Append(")};");
                sbdel.Append(sbdelpas.ToString()).Append(Environment.NewLine);
                sbdel.Append("return db.GetState(sql,pas);").Append(Environment.NewLine).Append("}");
                //查询


                sbshu.Append(sbset.ToString()).Append(System.Environment.NewLine).Append("DbAccess db = new DbAccess();").Append(Environment.NewLine).Append(sbadd.ToString()).Append(Environment.NewLine).Append(sbupd.ToString()).Append(Environment.NewLine).Append(sbdel.ToString()).Append(Environment.NewLine).Append(sbsel.ToString()).Append(Environment.NewLine).Append("//查询").Append(System.Environment.NewLine).Append(sbbean.Append(System.Environment.NewLine).Append("    }").Append(Environment.NewLine).Append("return " + tableBean.ToLower().ToString() + ";" + System.Environment.NewLine + "}").ToString());
                ///
                sbshu.Append(System.Environment.NewLine);

                sbshu.Append(System.Environment.NewLine).Append("}").Append(System.Environment.NewLine).Append("}");
                this.RtbCodes.Text = sbshu.ToString();
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(this.filepath + "\\" + tableBean + ".cs", false, System.Text.Encoding.GetEncoding("gb2312")))
                {
                    sw.Write(sbshu.ToString());
                    sw.Flush();
                }
                this.RtbCodes.Text = sbshu.ToString();

            }
        }

        private void BtBrower_Click(object sender, EventArgs e)
        {
            this.FbdFileBrower.ShowDialog();
            this.filepath = this.FbdFileBrower.SelectedPath.ToString();
            this.model = this.filepath.Substring(this.filepath.LastIndexOf("\\") + 1);
        }

        private void BtResultChange_Click(object sender, EventArgs e)
        {
            ColumnUpdate("<asp:TextBox ID=\"Tb{0}\" runat=\"server\" Width=\"298px\"></asp:TextBox>\n");
        }

        private void BtUpdateColumn_Click(object sender, EventArgs e)
        {
            ColumnUpdate("Tb{0}.Text = "+this.TbTempName.Text+".{0};\n");
        }
        public void ColumnUpdate(string model)
        {
            StringBuilder tempChangeData = new StringBuilder();
            string tempBeforeData = this.RtbColumns.Text;
            string[] tempLines = tempBeforeData.Split(',');
            string[] tempSingleLine = null;
            foreach (string temp in tempLines)
            {
                tempChangeData.AppendFormat(model, temp.Replace("[", "").Replace("]", ""));


            }
            this.RtbColumnsResult.Text = tempChangeData.ToString();
        }

        private void BtOpenFiles_Click(object sender, EventArgs e)
        {
            DirsOpen(this.FbdFilesHtml.SelectedPath);
        }
        public void DirsOpen(string Path)
        {
         
            System.IO.DirectoryInfo dirs = new System.IO.DirectoryInfo(Path);
            foreach (FileInfo fi in dirs.GetFiles("*.htm"))
            {

                Process.Start("IExplore.exe", fi.FullName);
            }
          
            if (dirs.GetDirectories().Length > 0)
            {
                foreach (DirectoryInfo di in dirs.GetDirectories())
                {
                    Dirs(di.FullName);
                }
            }
        }

        private void BtOpen_Click(object sender, EventArgs e)
        {
            this.FbdFilesHtml.ShowDialog();
        }

        private void BtChangeHtml_Click(object sender, EventArgs e)
        {

        }

        private void BtHtmlJs_Click(object sender, EventArgs e)
        {
            StringBuilder tempChangeData = new StringBuilder();
            string tempBeforeData = this.RtbColumns.Text;
            string[] tempLines = tempBeforeData.Split('\n');
            string[] tempSingleLine = null;
            foreach (string temp in tempLines)
            {
                tempChangeData.Append(temp.Replace("\"","'"));
              }
            this.RtbColumnsResult.Text = "document.Write(\""+tempChangeData.ToString()+"\");";
        }

        private void BtSelectFile_Click(object sender, EventArgs e)
        {
            this.OpSelectFile.ShowDialog();
        }

        private void BtOp_Click(object sender, EventArgs e)
        {
            string path = this.OpSelectFile.FileName;
            string content = this.ReadData(path,System.Text.Encoding.GetEncoding("GB2312"));
            this.RtbOpmizationCode.Text = System.Text.RegularExpressions.Regex.Replace(System.Text.RegularExpressions.Regex.Replace(System.Text.RegularExpressions.Regex.Replace(System.Text.RegularExpressions.Regex.Replace(content, ">[\r\t\n ]*", ">"),"[\r\n\t ]*<","<",System.Text.RegularExpressions.RegexOptions.Multiline),">[ ]*<","><"),"[\r\n\t]*","");

           

        }
        /// <summary>
        /// 写文件数据
        /// </summary>
        /// <param name="path"></param>
        /// <param name="content"></param>
        /// <param name="encoding"></param>
        /// <param name="append"></param>
        /// <returns></returns>
        public bool WriteData(string path, string content, System.Text.Encoding encoding,bool append)
        {
            bool state = false;
            try
            {
                using (System.IO.StreamWriter sw = new StreamWriter(path, append, encoding))
                {
                sw.Write(content);
                sw.Flush();
                }
            state = true;
            }
            catch
            {
               
         
            }
            return state;
          
        }
        /// <summary>
        /// 读数据
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public string ReadData(string path,System.Text.Encoding encoding)
        {
            string content = "";
            using (System.IO.StreamReader sr = new StreamReader(path, encoding))
            {
                content = sr.ReadToEnd();
            }
            return content;
        }

        private void BtSave_Click(object sender, EventArgs e)
        {
            string path = this.OpSelectFile.FileName;
            this.WriteData(path,this.RtbOpmizationCode.Text,System.Text.Encoding.GetEncoding("Gb2312"),false);
        }

        private void BtTimer_Click(object sender, EventArgs e)
        {
            TimeStart.Interval = 1200;
            if (this.TimeStart.Enabled)
            {
                this.TimeStart.Stop();
            }
            else
            {
                this.TimeStart.Start();
            }
        }

        private void TimeStart_Tick(object sender, EventArgs e)
        {
            string path = this.FbdFileBrower.SelectedPath;
            num++;
            this.LabNum.Text = num.ToString();
            Application.DoEvents();
            //首页
            string tempGroupData = GetHttpData("http://www.domain.com/index.aspx");
            using (StreamWriter sw = new StreamWriter(path + "/Index.html", false, System.Text.Encoding.GetEncoding("utf-8")))
            {
                sw.Write(tempGroupData);
                sw.Flush();
            }
            //产业群首页
            tempGroupData = GetHttpData("http://www.domain.com/Group/index.aspx");
            if (!Directory.Exists(path + "\\Group"))
            {
                Directory.CreateDirectory(path + "\\Group");
            }
            using (StreamWriter sw = new StreamWriter(path + "/Group\\Index.html", false, System.Text.Encoding.GetEncoding("utf-8")))
            {
                sw.Write(tempGroupData);
                sw.Flush();
            }
            TimeStart.Interval = 24 * 60 * 60*1000;
        }
        public string GetHttpData(string sUrl)
        {
            string sRslt = null;
            WebResponse oWebRps = null;
            WebRequest oWebRqst = WebRequest.Create(sUrl);
            oWebRqst.Timeout = 50000;
            try
            {
                oWebRps = oWebRqst.GetResponse();
            }

            finally
            {
                if (oWebRps != null)
                {
                    StreamReader oStreamRd = new StreamReader(oWebRps.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
                    sRslt = oStreamRd.ReadToEnd();
                    oStreamRd.Close();
                    oWebRps.Close();
                }
            }
            return sRslt;
        }

        private void BtWebSite_Click(object sender, EventArgs e)
        {
            this.FbdFileBrower.ShowDialog();
        }

        private void FormHome_Load(object sender, EventArgs e)
        {

        }

        private void FormHome_ResizeBegin(object sender, EventArgs e)
        {
         //   MessageBox.Show(this.WindowState.ToString());
        }

        private void FormHome_ResizeEnd(object sender, EventArgs e)
        {
            //if (this.WindowState == FormWindowState.Minimized)
            //{
            //  //  this.noAuto.Visible = true;
            //   // this.Hide();
            //    this.Visible = true;
            //}
            //else
            //{
 
            //}
            //MessageBox.Show(this.WindowState.ToString());

        }

 

        #region 还原窗体

        private void normalForm()
        {
            this.Visible = true;
            this.WindowState=FormWindowState.Normal;
        }
        #endregion

 
        private void minForm()
        {
            WindowState = FormWindowState.Minimized;
            this.Visible = false;
            this.noAuto.Visible = true;
        }

        private void noAuto_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized || this.Visible == false)
            {
                this.normalForm();
            }
            else
            {
                minForm();
            }
        }

        private void FormHome_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Visible = false;
            }
         
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Dirs(this.FbdAllFiles.SelectedPath);
            //MessageBox.Show(this.richTextBox1.Text.Length.ToString());
        }

        private void BtObserve_Click(object sender, EventArgs e)
        {
            string tempUrl = this.TbUrl.Text.Trim();
            string tempType = this.CbType.Text.Trim();
            tempType= tempType.Length > 0 ? (tempType) : ("gb2312");
            this.RtbContent.Text = this.GetHttpData(tempUrl, tempType);

        }
        public string GetHttpData(string sUrl,string encoding)
        {
            string sRslt = null;
            WebResponse oWebRps = null;
            WebRequest oWebRqst = WebRequest.Create(sUrl);
            oWebRqst.Timeout = 50000;
            try
            {
                oWebRps = oWebRqst.GetResponse();
            }

            finally
            {
                if (oWebRps != null)
                {
                    StreamReader oStreamRd = new StreamReader(oWebRps.GetResponseStream(), System.Text.Encoding.GetEncoding(encoding));
                    sRslt = oStreamRd.ReadToEnd();
                    oStreamRd.Close();
                    oWebRps.Close();
                }
            }
            return sRslt;
        }
        //public void Dirs(string Path)
        //{

        //    System.IO.DirectoryInfo dirs = new System.IO.DirectoryInfo(Path);
        //    foreach (FileInfo fi in dirs.GetFiles("*.htm"))
        //    {

        //        Process.Start("IExplore.exe", fi.FullName);
        //    }

        //    if (dirs.GetDirectories().Length > 0)
        //    {
        //        foreach (DirectoryInfo di in dirs.GetDirectories())
        //        {
        //            Dirs(di.FullName);
        //        }
        //    }
        //}


        private void BtBrowerFiles_Click(object sender, EventArgs e)
        {
            this.FbdAllFiles.ShowDialog();
        }

        private void BtSearch_Click(object sender, EventArgs e)
        {
            //百度一下,找到相关网页约384,000篇
             string tempUrl = this.TbUrl.Text.Trim();
            string tempType = this.CbType.Text.Trim();
            tempType= tempType.Length > 0 ? (tempType) : ("gb2312");
           // this.RtbContent.Text = this.GetHttpData(tempUrl, tempType);
           Match mat = Regex.Match(GetHttpData(tempUrl, tempType), "百度一下,找到相关网页约(?<ResultCount>.*)篇", System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);
           MessageBox.Show(mat.Groups["ResultCount"].Value);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //百度一下,找到相关网页约384,000篇
            string tempUrl = this.TbUrl.Text.Trim();
            string tempType = this.CbType.Text.Trim();
            tempType = tempType.Length > 0 ? (tempType) : ("gb2312");
            Match mat = Regex.Match(GetHttpData(tempUrl, tempType), "has a  traffic rank of:(?<ResultCount>.*)<!--", System.Text.RegularExpressions.RegexOptions.IgnoreCase );
            MessageBox.Show(Regex.Replace(mat.Groups["ResultCount"].Value,"<[^>]*>",""));
        }
        public void Dirs(string path)
        {
            DirectoryInfo dis = new DirectoryInfo(path);
            FileInfo[] files = dis.GetFiles();
            foreach (FileInfo fi in files)
            {
                i++;
                Application.DoEvents();
                this.labCount.Text = i.ToString();
                try
                {
                    File.Delete(fi.FullName);
                }
                catch (Exception ex)
                {
                    this.rtbMessage.Text += ex.Message;

                }

                //  GetSqlFile(fi.FullName, this.textBox1.Text + fi.DirectoryName.Substring(2), fi.FullName.Substring(fi.FullName.LastIndexOf("\\") + 1), 1024, 768);
            }
            if (dis.GetDirectories().Length > 0)
            {
                for (int i = 0; i < dis.GetDirectories().Length; i++)
                {
                    Dirs(dis.GetDirectories()[i].FullName);
                }
            }


        }

        private void button6_Click(object sender, EventArgs e)
        {
            Dirs(this.textBox1.Text.Trim());
            Dirs(this.textBox2.Text.Trim());
            Dirs(this.textBox3.Text.Trim());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.FbdSelectDeleteFile.ShowDialog();
            this.textBox1.Text = this.FbdSelectDeleteFile.SelectedPath.Trim();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.FbdSelectDeleteFile.ShowDialog();
            this.textBox2.Text = this.FbdSelectDeleteFile.SelectedPath.Trim();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.FbdSelectDeleteFile.ShowDialog();
            this.textBox3.Text = this.FbdSelectDeleteFile.SelectedPath.Trim();
        }

       


     
       
     
    }
}

一个不怎么智能,半手工方式的,但最适合实际开发的java代码生成器 核心理念: 为你生成一切,再根据所需手工copy回来工作区 用最精简的代码完成最核心的功能 特性 基于FreeMarker模板语言,并且模板易于修改 基于数据库,内建好数据库的model,并支持多种数据库(mysql,sql server,oracle测试通过) 半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区 易于做二次开发,整个生成器本身就是java源代码,源代码核心十分精简,并且鼓励你修改代码,也可以作为任何语言的代码生成器 配置简单,只有一个配置文件generator.properties 生成器的运行 在eclipse中运行 配置classpath,将generator/lib中的rapid-generator.jar及其它数据库驱动加入classpath 修改generator.xml的数据库连接属性及其它属性 以application的方式运行GeneratorMain类,要生成不同的table,直接修改代码即可 public class GeneratoMain { public static void main(String[] args) throws Exception { GeneratorFacade g = new GeneratorFacade(); //删除生成器的输出目录 g.deleteOutRootDir(); //通过数据库表生成文件,template为模板的根目录 // g.generateByTable("table_name","template"); //自动搜索数据库中的所有表并生成文件,template为模板的根目录 g.generateByAllTable("template"); // g.generateByClass(Blog.class,"template_clazz"); //删除生成的文件 // g.deleteByTable("table_name", "template"); } } 以application方式运行cn.org.rapid_framework.generator.ext.CommandLine 独立版运行 下载standandalone-rapid-generator.zip,解压并运行rapid-gen.bat 生成器讲解 1.生成器模板路径可以引用相关变量 示例:dao/${basepackage_dir}/${className}.java,根据该变量生成输出文件 如果basepackage_dir = com/company/rapid, className=UserInfo 那么完整路径则为:dao/com/company/rapid/UserInfo.java 2.自动搜索某个目录所有模板文件,无需配置 代码生成器模板可以引用的相关变量 1. g.generateByTable("table_name") 方法可以引用的变量 table : cn.org.rapid_framework.generator.provider.db.table.model.Table 2. g.generateByClass("class") 方法可以引用的变量 clazz : cn.org.rapid_framework.generator.provider.java.model.JavaClass 3. g.generateBySql(Sql) 方法可以引用的变量 sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有前缀 gg : 模板控制变量, cn.org.rapid_framework.generator.GeneratorControl 每个模板有gg变量可以控制自身的自定义配置 (每一个模板都会创建新的gg实例) 如是否生成,是否覆盖目标文件,甚至是生成其它文件 示例: ${gg.setIgnoreOutput(true)}, 参考: rapid_generator_gg 支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除 3.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式 (通过扩展名自动识别) 4.自动删除模板扩展名:.ftl,.vm 举例: 如你有一个模板 SqlMap.xml.ftl 将变为 SqlMap.xml 所以你要生成ftl扩展名的文件,应该将文件名从 list.ftl => list.ftl.ftl 5.模板自动include同级目录:macro.include文件 示例: 如你的模板为 java_src/com/project/UserDao.java, 将自动include: java_src/com/project/macro.include 及 根目录的macro.include 6.generator.xml (或者generator.properties)配置文件 类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME}, 引用System.getProperties()直接引用 2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"dir"后缀 示例: pkg=com.company => pkg_dir=com/company 7. 数据库表配置,用于自定义生成器模板引用的table变量 配置文件必须存放在classpath: generator_config/table/table_name.xml (该文件生成器可以生成,自己再自定义修改) <!-- <table sqlName="数据库表名" className="类名称" tableAlias="表的别名"> <column sqlName="数据库列名" columnAlias="列的别名" javaType="自定义javaType" unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,男);F(0,女) 或者是:M(男);F(女)" enumClassName="如果枚举有值,生成的类名称将是这个,没有枚举值,该配置无用.示例值:Sex" /> </table> --> <table sqlName="user_info" className="UserInfo" tableAlias="UserInfo"> <column sqlName="username" columnAlias="用户名" javaType="String" unique="false" nullable="true" pk="false" updatable="true" insertable="true" enumString="F(1,Female);M(0,Male)" enumClassName="用户枚举" /> <column sqlName="password" columnAlias="password" javaType="String" unique="false" nullable="true" pk="false" updatable="true" insertable="true" enumString="" enumClassName="PasswordEnum" /> </table> 生成的代码插入文档的某个部位 如模板输出生成的地方已经有该 同名的文件 存在,并且该文件中有包含"generator-insert-location"标记,则模板生成的内容会插入在该标记之后.该特性对如生成的spring配置内容插入spring配置文件十分有用 创建一个生成器模板文件 在temppate目录创建一个文件,如${className}SpringControler.java 则代码生成器会自动将该模板文件加载并生成该文件 充分利用各种文件的注释 如在.xml中我们可以使用 在.properties文件中我们可以使用 #generator-insert-location 具体请查看template/insert_demo目录的内容 生成器参数配置 通过设置GeneratorProperties.setProperty(key,value)设置相关参数值. 完整的配置参数请查看: rapid-generator/rapid-generator/src/main/java/cn/org/rapid_framework/generator/GeneratorConstants.java 生成器核心类图 Generator为生成器引擎 GeneratorFacade为生成器入口调用类 GeneratorProperties 生成器的相关配置,用于读取generator.properties(或者是generator.xml) TableFactory用于创建Table.java对象,用于GeneratorFacade.generateByTable()使用 SqlFactory用于创建Sql.java对象,用于GeneratorFacade.generateBySql()使用 JavaClass模板变量,用于GeneratorFacade.generateByClass()使用 重复生成代码 现rapid自带的模板都不支持重复生成代码的,如果你需要重复生成代码,可以采用继承机制技巧重复生成。 Java代码的重复生成,善用 "继承机制" , 示例如下: UserInfoBaseDao : 自动生成的代码, 不能手工修改,用于重复生成 UserInfoDao extends UserInfoBaseDao : 存放手工的代码,不能重复生成 页面的重复生成还没有啥好办法。 语法参考: http://freemarker.sourceforge.net/docs/index.html 具体使用请看 在线文档说明 本项目内置模板文件属于 rapid-framework 的一部分 rapid-framework简单介绍: rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp的增删改查及列表页面 通常代码生成器存在的问题 二次开发困难,没有源码可以修改模板文件的model对象等 过于智能,自动插入我们的项目中,程序员还需考虑旧的代码会不会被覆盖的问题 生成文件的时候让你选要生成那些文件, 而rapid只负责生成代码,这样生成器核心一分精简,没有将存放模板的目录名称及文件名称利用起来,导致还需配置每个模板文件生成的文件名,目录结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值