澳门新葡亰平台游戏网站动软代码生成工具

澳门新葡亰平台游戏网站 3

运维命令表率

java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite

该器件源码能够在下载的安装包里面看见依旧去官网下载。

在《基于T4的代码生成格局》中,作者对T4模板的三结合布局、语法,以至T4引擎的办事原理进行了大致的介绍,並且编写了二个T4模板完结了何等将四个XML调换成C#代码。为了让因而需要的读者对T4有越来越深的询问,大家通过T4来做一些尤其实际的事务——SQL
Generator。在此处,大家得以经过SQL Generator为有个别数据表自动生成举行扦插、改正和删除的存款和储蓄进度。[文中源代码从这里下载]

代码框架

mvn archetype:generate -DgroupId=com.zju -DartifactId=JavaWebCodeGenerator -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal

分选说明:

正文转自:

品类组织

澳门新葡亰平台游戏网站 1

开拓菜单【工具】-【选项】-【代码生成设置】

五、为CUD操作创制具体模板

基类ProcedureTemplate已经定义出了至关心尊崇要的转向法规,大家今后亟待做的正是经过T4模板创立3个绘身绘色的ProcedureTemplate,分别达成针对CUD存款和储蓄进度的转移。为此笔者创制了七个再而三自ProcedureTemplate的现实类:InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate,它只须要贯彻RenderParameterList和RenderProcedureBody那八个抽象方法既就可以,上边是它们的定义。

<#@ include file="ProcedureTemplate.tt" #>

<#+

public class InsertProcedureTemplate : ProcedureTemplate

{   

    public InsertProcedureTemplate(string databaseName, string tableName): base(databaseName,tableName,OperationKind.Insert){}



    protected override void RenderParameterList()

    {

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(column.Name != VersionNoField)

            {

                if(i<this.Table.Columns.Count -1)

                {

                    WriteLine("{0, -20}[{1}],", GetParameterName(column.Name),column.DataType.Name.ToUpper());

                }

                else

                {

                    WriteLine("{0, -20}[{1}]", GetParameterName(column.Name),column.DataType.Name.ToUpper());

                }

            }            

        }    

    }



    protected override void RenderProcedureBody()

    {

        WriteLine("INSERT INTO [dbo].[{0}]", this.Table.Name);

        WriteLine("(");

        PushIndent("t");

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(column.Name != VersionNoField)

            {

                if(i<this.Table.Columns.Count -1)

                {

                    WriteLine("[" +column.Name + "],");    

                }

                else

                {

                    WriteLine("[" +column.Name + "]");    

                }

            }

        }

        PopIndent();

        WriteLine(")");

        WriteLine("VALUES");

        WriteLine("(");

        PushIndent("t");

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(column.Name != VersionNoField)

            {

                if(i<this.Table.Columns.Count -1)

                {

                    WriteLine(GetParameterName(column.Name) + ",");    

                }

                else

                {

                    WriteLine(GetParameterName(column.Name));    

                }

            }



        }

        PopIndent();

        WriteLine(")");

    }

}

#>

<#@ include file="ProcedureTemplate.tt" #>

<#+

public class UpdateProcedureTemplate : ProcedureTemplate

{   

    public UpdateProcedureTemplate(string databaseName, string tableName): base(databaseName,tableName,OperationKind.Update)

    {}



    protected override void RenderParameterList()

    {

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(i<this.Table.Columns.Count -1)

            {

                 WriteLine("{0, -20}[{1}],", GetParameterName(column.Name),column.DataType.Name.ToUpper());

            }

            else

            {

                 WriteLine("{0, -20}[{1}]", GetParameterName(column.Name),column.DataType.Name.ToUpper());

            }

        }    

    }



    protected override void RenderProcedureBody()

    {

        WriteLine("UPDATE [dbo].[{0}]", this.Table.Name);

        WriteLine("SET");

        PushIndent("t");

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(!column.InPrimaryKey)

            {

                if(i<this.Table.Columns.Count -1)

                {

                    WriteLine("{0,-20}= {1},", "[" +column.Name + "]", this.GetParameterName(column.Name));    

                }

                else

                {

                    WriteLine("{0,-20}= {1}", "[" +column.Name+"]", this.GetParameterName(column.Name));    

                }

            }            

        }

        PopIndent();

        WriteLine("WHERE");

        PushIndent("t");

        for(int i=0; i<this.Table.Columns.Count;i++)

        {

            Column column = this.Table.Columns[i];

            if(column.InPrimaryKey)

            {

                WriteLine("{0, -20}= {1} AND", "[" +column.Name + "]", GetParameterName(column.Name));

            }                        

        }

        WriteLine("{0, -20}= {1}", "[" + VersionNoField + "]", VersionNoParameterName);

        PopIndent();

    }

}

#>

<#@ include file="ProcedureTemplate.tt" #>

<#+

public class DeleteProcedureTemplate : ProcedureTemplate

{   

    public DeleteProcedureTemplate(string databaseName, string tableName): base(databaseName,tableName,OperationKind.Delete){}



    protected override void RenderParameterList()

    {

        foreach (Column column in this.Table.Columns)

        {

            if (column.InPrimaryKey)

            {

                WriteLine("{0, -20}[{1}],", GetParameterName(column.Name),column.DataType.Name.ToUpper());

            }

        }

        WriteLine("{0, -20}[{1}]", VersionNoParameterName, "TIMESTAMP");

    }



    protected override void RenderProcedureBody()

    {

        WriteLine("DELETE FROM [dbo].[{0}]", this.Table.Name);

        WriteLine("WHERE");

        PushIndent("tt");

        foreach (Column column in this.Table.Columns)

        {

            if (column.InPrimaryKey)

            {

                WriteLine("{0, -20}= {1} AND", column.Name, GetParameterName(column.Name));

            }

        }

        WriteLine("{0, -20}= {1}", VersionNoField, VersionNoParameterName);            

    }

}

#>

至于多个实际的ProcedureTemplate怎么着变化参数列表和核心部分,在那就不在多做验证了。这里独一须求强调的是:脚本的输出是因而TextTransformation的静态WriteLine方法完毕,它和Console的同名方法运用相同。针对大家事情发生前定义的多少表T_PRODUCT的结果,通过在小说初叶定义的三个TT模板,最终将会变动如下的两个存款和储蓄进程。

IF OBJECT_ID( '[dbo].[P_PRODUCT_I]', 'P' ) IS NOT NULL

    DROP  PROCEDURE  [dbo].[P_PRODUCT_I]

GO

 

CREATE PROCEDURE [dbo].[P_PRODUCT_I]

(

    @p_id               [VARCHAR],

    @p_name             [NVARCHAR],

    @p_price            [FLOAT],

    @p_total_price      [FLOAT],

    @p_desc             [NVARCHAR],

    @p_created_by       [VARCHAR],

    @p_created_on       [DATETIME],

    @p_last_updated_by  [VARCHAR],

    @p_last_updated_on  [DATETIME],

    @p_transaction_id   [VARCHAR]

)

AS



    INSERT INTO [dbo].[T_PRODUCT]

    (

        [ID],

        [NAME],

        [PRICE],

        [TOTAL_PRICE],

        [DESC],

        [CREATED_BY],

        [CREATED_ON],

        [LAST_UPDATED_BY],

        [LAST_UPDATED_ON],

        [TRANSACTION_ID]

    )

    VALUES

    (

        @p_id,

        @p_name,

        @p_price,

        @p_total_price,

        @p_desc,

        @p_created_by,

        @p_created_on,

        @p_last_updated_by,

        @p_last_updated_on,

        @p_transaction_id

    )

 

GO

IF OBJECT_ID( '[dbo].[P_PRODUCT_U]', 'P' ) IS NOT NULL

    DROP  PROCEDURE  [dbo].[P_PRODUCT_U]

GO

 

CREATE PROCEDURE [dbo].[P_PRODUCT_U]

(

    @p_id               [VARCHAR],

    @p_name             [NVARCHAR],

    @p_price            [FLOAT],

    @p_total_price      [FLOAT],

    @p_desc             [NVARCHAR],

    @p_created_by       [VARCHAR],

    @p_created_on       [DATETIME],

    @p_last_updated_by  [VARCHAR],

    @p_last_updated_on  [DATETIME],

    @p_version_no       [TIMESTAMP],

    @p_transaction_id   [VARCHAR]

)

AS



    UPDATE [dbo].[T_PRODUCT]

    SET

        [NAME]              = @p_name,

        [PRICE]             = @p_price,

        [TOTAL_PRICE]       = @p_total_price,

        [DESC]              = @p_desc,

        [CREATED_BY]        = @p_created_by,

        [CREATED_ON]        = @p_created_on,

        [LAST_UPDATED_BY]   = @p_last_updated_by,

        [LAST_UPDATED_ON]   = @p_last_updated_on,

        [VERSION_NO]        = @p_version_no,

        [TRANSACTION_ID]    = @p_transaction_id

    WHERE

        [ID]                = @p_id AND

        [VERSION_NO]        = @p_version_no

 

GO

IF OBJECT_ID( '[dbo].[P_PRODUCT_D]', 'P' ) IS NOT NULL

    DROP  PROCEDURE  [dbo].[P_PRODUCT_D]

GO

 

CREATE PROCEDURE [dbo].[P_PRODUCT_D]

(

    @p_id               [VARCHAR],

    @p_version_no       [TIMESTAMP]

)

AS



    DELETE FROM [dbo].[T_PRODUCT]

    WHERE

            ID                  = @p_id AND

            VERSION_NO          = @p_version_no

 

GO

安排思路

体系参谋Mybatis generator生成代码的经过,具体步骤分为以下5步。

逻辑步骤

  1. 解析命令行
  2. 剖判配置文件
  3. 拿到数据表音信
  4. 转移配置消息
  5. 调换文书

 

一、代码生成器的尾声利用效用

咱俩首先来拜见通过直接适用我们依照T4的SQL生成模板达到的效能。右图(点击看大图)是VS二〇〇八的Solution
Explorer,在Script目录下边,作者定义了八个后缀名称叫.tt的T4模板。它们其实是依附同一个数据表(T_PRODUCT)的多个存款和储蓄进程的生成创立的模版文件,个中P_PRODUCT_D.tt、P_PRODUCT_I.tt和P_PRODUCT_D.tt分别用于记录的删除、插入和改动。自动生成的扩充名字为.sql的同名从属文件就是应和的仓库储存进程。

听他们说两种不一样的数额操作(Insert、Update和Delete),笔者创造了3个重用的、与具体数据表无关的沙盘模拟经营:
InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate。那样做的指标为为了落实最大的任用,纵然大家须要为有些数据表创制相应的贮存进度的时候,咱们得以平昔采取它们传播相应的数码表名就能够了。实际上,P_PRODUCT_D.tt、P_PRODUCT_I.tt和P_PRODUCT_D.tt那多少个T4模板的布局相当的粗略,它们通过<#@include>指令将定义着相应ProcedureTemplate的T4模板文件蕴含进来。最终的蕴藏进程脚本通过调用ProcudureTempalte的Render方法生成。在那之中布局函数的参数表示的分级是三回九转字符串名称(在配备文件中定义)和数据表的称呼。

<#@ template language="C#" hostspecific="True" #>

<#@ output extension="sql" #>

<#@ include file="T4Toolbox.tt" #>

<#@ include file="..TemplatesDeleteProcedureTemplate.tt" #>

<#

    new DeleteProcedureTemplate("TestDb","T_PRODUCT").Render();

#>

<#@ template language="C#" hostspecific="True" #>

<#@ output extension="sql" #>

<#@ include file="T4Toolbox.tt" #>

<#@ include file="..TemplatesInsertProcedureTemplate.tt" #>

<#

    new InsertProcedureTemplate("TestDb","T_PRODUCT").Render();

#>

<#@ template language="C#" hostspecific="True" #>

<#@ output extension="sql" #>

<#@ include file="T4Toolbox.tt" #>

<#@ include file="..TemplatesUpdateProcedureTemplate.tt" #>

<#

    new UpdateProcedureTemplate("TestDb","T_PRODUCT").Render();

#>

构造文件楷模

generatorConfig.properties

class.path.entry=src/test/resources/mysql-connector-java-5.1.38.jar
driver.class=com.mysql.jdbc.Driver
connection.url=jdbc:mysql://localhost:3307/work
user.id=
user.password=
java.model.package=com.model
sql.mapping.package=com.dao
project=src
table.name=holiday
domain.object.name=Holiday

 

六、局限性

地点那一个例子固然很好实现了根据数据表的积存进程的变动,不过利用起来依旧不低价——大家必要为每二个需求扭转出来的积累进程定义T4模板。相当于说在此种代码生成下,模板文件和转变文书之间是1:1的涉及。实际上大家期望的方式是:创造三个基于某些表的TT文件,让它生成3个CUD八个存款和储蓄进度;恐怕在贰个TT文件中设置一个数据表的列表,让基于这个表的具有存款和储蓄进程一并转移;或许直接子钦命数据库,让具备数据表的囤积进程一并生成出来。到底怎么着贯彻基于多文本的代码生成,请听《下回》分解。

从数量到代码——通过代码生成机制落到实处强类型编制程序[上篇]
从数量到代码——通过代码生成机制落实强类型编制程序[下篇]
从数量到代码——基于T4的代码生成情势
创立代码生成器能够很简单:怎么着通过T4模板生成代码?[上篇]
开创代码生成器能够很简短:怎么样通过T4模板生成代码?[下篇]

作者:Artech
出处:
本文版权归作者和天涯论坛共有,迎接转发,但未经作者同意必得保留此段申明,且在文章页面分明地点给出原版的书文连接,不然保留究查法律义务的职分。

实例演示

澳门新葡亰平台游戏网站 2

六.    批量代码生成

四、创建抽象的模板:ProcedureTemplate

大家供给为三不一样的数据操作得存款和储蓄进度定义分裂的模版,可是对于那三种存款和储蓄进程的SQL布局都是同等的,基本结果可以由此下边包车型客车SQL脚本表示。

IF OBJECT_ID( '<<ProcedureName>>', 'P' ) IS NOT NULL

    DROP  PROCEDURE  <<ProcedureName>>

GO

 

CREATE PROCEDURE <<ProcedureName>>

(

    <<ParameterList>>

)

AS



    <<ProcedureBody>>

 

GO

为此小编定义了一个空洞的模板:ProcedureTemplate。为了表示CUD二种不一样的操作,我透过T4模板的“类个性块”(Class
Feature Block)定义了之类一个OperationKind的枚举。

<#+ 

    public enum OperationKind

    {

        Insert,

        Update,

        Delete

    }

#>

接下来上边就是整整ProcedureTemplate的概念了。ProcedureTemplate直接接轨自T4Toolbox.Template(来源于T4
ToolBox,它连续自TextTransformation)。ProcedureTemplate通过SMO(SQL
Server Management
Object)获取数据表的协会(Schema)信息,所以大家必要运用SMO相关的程序集和导入相关命名空间。ProcedureTemplate具备七个属性Table(SMO忠爱味数据表)和OperationKind(表示具体的CUD操作的一种),它们均通过构造函数开端化。简单起见,大家向来不点名Server,而暗许使用本机钦定的数据库。

   1: <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>

   2: <#@ assembly name="Microsoft.SqlServer.Smo" #>

   3: <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>

   4: <#@ import namespace="System" #>

   5: <#@ import namespace="Microsoft.SqlServer.Management.Smo" #>

   6: <#+

   7: public abstract class ProcedureTemplate : Template

   8: {

   9:     public OperationKind OperationKind {get; private set;}

  10:     public Table Table {get; private set;}

  11:     

  12:     public const string VersionNoField             = "VERSION_NO";

  13:     public const string VersionNoParameterName     = "@p_version_no";

  14:     

  15:     public ProcedureTemplate(string databaseName, string tableName,OperationKind operationKind)

  16:     {

  17:         this.OperationKind     = operationKind;

  18:         Server server = new Server();

  19:         Database database = new Database(server,databaseName);

  20:         this.Table = new Table(database, tableName);

  21:         this.Table.Refresh();

  22:     }

  23:     

  24:     public virtual string GetProcedureName()

  25:     {

  26:         switch(this.OperationKind)

  27:         {

  28:             case OperationKind.Insert:    return "P_" +this.Table.Name.Remove(0,2) + "_I";

  29:             case OperationKind.Update:    return "P_" +this.Table.Name.Remove(0,2) + "_U";

  30:             default:                    return "P_" +this.Table.Name.Remove(0,2) + "_D";

  31:         }        

  32:     }

  33:     

  34:     protected virtual string GetParameterName(string columnName)

  35:     {

  36:         return "@p_" + columnName.ToLower();

  37:     }

  38:     

  39:     protected abstract void RenderParameterList();

  40:     

  41:     protected abstract void RenderProcedureBody();        

  42:  

  43:     public override string TransformText()

  44:     {

  45: #>

  46: IF OBJECT_ID( '[dbo].[<#=  GetProcedureName()#>]', 'P' ) IS NOT NULL

  47:     DROP  PROCEDURE  [dbo].[<#=  GetProcedureName()#>]

  48: GO

  49:  

  50: CREATE PROCEDURE [dbo].[<#= GetProcedureName() #>]

  51: (

  52: <#+

  53:         PushIndent("t");

  54:         this.RenderParameterList();

  55:         PopIndent();

  56: #>

  57: )

  58: AS

  59:    

  60: <#+

  61:         PushIndent("t");

  62:         this.RenderProcedureBody();

  63:         PopIndent(); 

  64:         PopIndent(); 

  65:         WriteLine("nGO");

  66:         return this.GenerationEnvironment.ToString();

  67:     }

  68: }

  69: #>

储存进程的参数大家应用小写格局,直接在列名前拉长叁个”p_”(Parameter)前缀,列名到参数名以内的转变通过措施GetParameterName达成。存款和储蓄进程名称通过阐明转变,转变法规为:将”T_”(Table)改成”P_”(Procedure)前缀,并添加”_I”、”_U”和”_D”表示相应的操作类型,存款和储蓄进度名称的剖判通过GetProcedureName完毕。整个存款和储蓄进程的出口通过艺术TransformText输出,并由此PushIndent和PopIndent方法调节缩进。由于CUD存款和储蓄唯有七个地点分歧等:参数列表和存款和储蓄过程的大旨,笔者定义了多个抽象方法RenderParameterList和RenderProcedureBody让现实的ProcedureTemplate去得以完结。

起因

体系中需求遵照数据库表写比较多Meta、Dao、Service代码,在那之中不少代码都以重复而麻烦的。因而只要有三个模板代码的生成器,就足以分明水平进步开荒功用。

 

三、成立数据表

T4模板就是输入和输出的三个适配器,那与XSLT的效果相比较附近。对于我们将在完结的SQL
Generator来说,输入的是数据表的布局(Schema)输出的是最后生成的存放过程的SQL脚本。对于数据表的定义,差异的品类拥有不一样职业。小编动用的是大家团结的数据库标准定义的数据表:T_PRODUCT(表示付加物新闻),上边是创设表的本子。

CREATE TABLE [dbo].[T_PRODUCT](

    [ID]                [VARCHAR](50) NOT NULL,

    [NAME]              [NVARCHAR] NOT NULL,

    [PRICE]             [float] NOT NULL,

    [TOTAL_PRICE]       [FLOAT] NOT NULL,

    [DESC]              [NVARCHAR]  NULL,

 

    [CREATED_BY]        [VARCHAR](50) NULL,

    [CREATED_ON]        [DATETIME] NULL,

    [LAST_UPDATED_BY]   [VARCHAR](50) NULL,

    [LAST_UPDATED_ON]   [DATETIME] NULL,

    [VERSION_NO]        [TIMESTAMP] NULL,

    [TRANSACTION_ID]    [VARCHAR](50) NULL,

 CONSTRAINT [PK_T_PRODUCT] PRIMARY KEY CLUSTERED( [ID] ASC)ON [PRIMARY])

每三个表中有6个国有的字段:CREATED_BY、CREATED_ON、LAST_UPDATED_BY、LAST_UPDATED_ON、VERSION_NO和TRANSACTION_ID分别代表记录的成立者、创建时间、最新更新者、最新更新时间、版本号(并发调控)和业务ID。

目标

可配置生成Java Web项目中Dao、Meta、Service层模板代码的生成器。

假诺急需修改部分公司署能够改正你协和的命名空间名字,是还是不是去掉表的前缀。

二、安装T4工具箱(Tool博克斯)和编辑器

VS自己只提供一套基于T4引擎的代码生成的实践遭遇,为了有扶助你的编制程序你能够安装一些扶植性的事物。T4
ToolBox是八个CodePlex上开源的工具,它满含部分能够直接动用的代码生成器,举例Enum
SQL
View、AzMan
wrapper、LINQ
to SQL
classes、LINQ
to SQL
schema和Entity
Framework
DAL等。T4
ToolBox还提供部分依据T4方面的VS的扩充。当您遵照之后,在“Add New
Item”对话框中就能够多出四个命名称叫“Code
Generation”的连串,当中囊括若干文书模板。上面提供的T4模板的编辑撰写职业重视于那些工具。

澳门新葡亰平台游戏网站 3

为了拉长编程体验,比方智能感知以致代码配色,我们还是能安装一些第三方的T4编辑器。笔者使用的是叁个叫作Oleg
Sych的T4
Editor。它抱有无偿版本和内需付费的正经八百版本,当然笔者使用的免费的这款。成功按装了,它也会在Add
New Item”对话框中提供对应的基于T4 的文本模板。

代码设计

指令解析类 ShellRunner

此类担任拆解解析命令行的下令,拆解剖判配置文件并打包所需的数目给代码生成类。

可深入分析命令有-configfile:指定安插文件所在路径和-overwrite:是或不是重写目的文件。

安插文件的布署项有:

//Java SQL 驱动所在路径(暂未使用)
private static final String CLASS_PATH_ENTRY = "class.path.entry";
//Java 驱动类型(暂未使用)
private static final String DRIVER_CLASS = "driver.class";
//数据库地址
private static final String CONNECTION_URL = "connection.url";
//数据库用户名
private static final String USER_ID = "user.id";
//数据库密码
private static final String USER_PASSWORD = "user.password";
//模型生成地址
private static final String JAVA_MODEL_PACKAGE = "java.model.package";
//SQL生成地址
private static final String SQL_MAPPING_PACKAGE = "sql.mapping.package";
//项目地址
private static final String PROJECT = "project";
//数据表名
private static final String TABLE_NAME = "table.name";
//模型名称
private static final String DOMAIN_OBJECT_NAME = "domain.object.name";

代码生成类 CodeGenerator

此类肩负连接数据库,查询数据表的表新闻,将SQL类型映射成Java类型并打包所需的数码给文件生成类。

Class.forName(configuration.getDriverClass());
//获取数据库连接
Connection connection = DriverManager.getConnection(configuration.getConnectionURL(), configuration.getUserId(), configuration.getPassword());
DatabaseMetaData databaseMetaData = connection.getMetaData();
//获取表结构信息
ResultSet rs = databaseMetaData.getColumns("", "", configuration.getTableName(), "%");

通过上述几行代码,rs变量中曾经赢得目的数据表的表新闻。

databaseMetaData.getColumns方法的真相是进行了SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME="tableName"语句。

在结果集中,后续管理大致必要以下表消息列。

字段 描述
DATA_TYPE 数据类型
COLUMN_SIZE 数据长度
COLUMN_NANE 列名
NULLABLE 是否允许非空
DECIMAL_DIGITS 小数位数
REMARKS 备注
COLUMN_DEF 默认值

末尾经过JavaTypeResolver中的类型映射(Map<Integer, JdbcTypeInformation> typeMap)和StringUtils中的驼峰命名调换(getCamelCaseString卡塔尔国将SQL音信转变到Java音讯。

文本生成类 FileGenerator

该类通过FreeMarker模板引擎组合数据成靶子代码文件。

主逻辑如下:

/**
* @param configuration 封装的配置信息
* @param columns       封装的数据表列信息
* @throws IOException
* @throws TemplateException
*/
public static void writeFile(Configuration configuration, List<TableColumn> columns) throws IOException, TemplateException {
    File r=new File("");
    //测试环境获取项目根目录路径
    //String path=Class.class.getClass().getResource("/").getPath();
    //Jar包获取根目录路径
    String path=r.getAbsolutePath();
    //System.out.println("path:"+path);
    Configuration cfg = new Configuration();
    cfg.setDirectoryForTemplateLoading(new File(path + "/ftl")); //需要文件夹绝对路径
    cfg.setDefaultEncoding("UTF-8");
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
    Map root = new HashMap();
    root.put("configuration", configuration);
    root.put("columnList", columns);
    writeSingleFile(cfg, root, "DaoImpl.ftl", configuration.getProjectPath(), configuration.getSqlMappingPackage().replace(".", "/"), configuration.getDomainObjectName(), "DaoImpl.java",configuration.getOverwrite());
    writeSingleFile(cfg, root, "Dao.ftl", configuration.getProjectPath(), configuration.getSqlMappingPackage().replace(".", "/"), configuration.getDomainObjectName(), "Dao.java",configuration.getOverwrite());
    writeSingleFile(cfg, root, "Meta.ftl", configuration.getProjectPath(), configuration.getJavaModelPackage().replace(".", "/"), configuration.getDomainObjectName(), ".java",configuration.getOverwrite());
}

注意

在测量试验中,Class.class.getClass().getResource("/").getPath();该方式能够拿走项目根目录,但是在测量试验生成的Jar包时,该方法时间效益。由此在生成Jar包前内需把该行订正成new File("").getAbsolutePath();赢得生成路线。

转移后,那么些代码大家一向就足以复制到数据访谈层,不用再用手三个个敲了,省出来的年月大家得以去喝咖啡喽。

源代码

(4)输入数据库服务器客户名密码。假诺不晓得,请联系你的数据库管理员。
(5)如若数据库的表超级多,连接速度会十分的快,启用【高效连接方式】达成急速连接。
(6)能够透过【连接/测验】,来三番两次服务器并获得数据库列表,进而得以实现只接收总是一个库进展操作,缩短不必要的连接时间,提升级技术员作效用。

  • 项目名称:首要用在生成DB脚本中。
  • 二级命名空间:指的是其一类位居某叁个二级文件夹下,进而命名空间中应该带那些文件夹的名字。
  • 五星级命名空间:正是类别的命名空间名称。
  • 类名:能够团结依照表名定义自身索要的名字。
  • 类型:首倘若生成什么样代码,DB脚本重要生成表的积存进度和表的成立脚本及数码脚本。
  • 构造选拔:近期仅扶持那3种最常用的布局。
  • 代码类型澳门新葡亰平台游戏网站,:指生成钦命结构中现实某叁个项目中的代码。
  • 代码模板组件类型:指生成代码的方法,因为固然同二个代码有比较多的写法,组件主要完毕的是区别的写法,但每一种写法实现的功效都是完全一样的。首要看项目供给和私家习于旧贯进行分选。
  • 主意选拔:指生成最基本的增删改查的方式代码,后续版本将扶助客户自定义那么些形式。

 

 

有的时候候须要迁移数据库,可能生成表构造脚本,导出数据脚本到别的数据库,常常支付中也对比普遍,那么些能够经过动软自动生成SQL脚本功用来帮您节约多量的年月。

 

率先,日常首回变动,大家要调换的是整个项目框架。

广泛难点(单击以下链接查看内容详实)

科学普及难点(单击以下链接查看内容详实)

§  由此partial关键字扩大代码生成器生成的代码 

§  动软左边树菜单导航,不能平常彰显? 

§  动软新建项目(示例项目)怎么样登入? 

§  Access用奥莱DbParameter不也许更新数据建设方案 

§  动软DBUtility类库DbHelperSQL达成好多据库连接 

§  动软.net代码生成器 运行报错退出消亡办法 

§  Asp.net1.0荣升ASP.NET
2.0的多少个难题总括 

§  身体力行项目源码无法创造对象实例的科学普及错误表明 

 

 

 

这里暂以“轻易三层组织(管理)”为例进行认证。

手把手教你用动软

 

 

代码模板组件类型,常常初学者建议私下认可就能够。

二.    下载安装

 

六.        批量代码生成

  1. 双击Codematic2.msi 进展直接设置就可以。

在表上右键,选取【生成数据脚本】

生成后:

重在通过以下多少个地点开展退换:

  1. 系统必要
    Microsoft Windows二零零三/XP/二〇〇〇/7 或许越来越高。机器必得安装.NET Framework
    v2.0。
  2. 合法下载地址:
  3. 下载解压后装置包犹如下文件:

 

  1. 在数据库上右键,【浏览数据库】,通过筛选库和表可以查看表和字段的音讯。

l  轻便三层布局(管理):生成规范的三层布局项目,况兼带有基本的系统管理成效和分界面,那个通用的功用主借使节约开荒职员的时光,能够在那根基上向来去开辟自个儿业务模块。

 

 

在看过了骨干的数据库管理效果之外,下边我们就能够带头转移代码了。

此间提供了二种格式的文书档案,一种是Word格式的,但需求本机安装Office二零零零或二〇〇七。另一种是网页格式,能够生成两种分界面风格的网页格式数据库文档。

除了新建项目和批量代码生成,一时大家愿意更个性化自定义一些代码生成的字段,实际不是百分之百的自动生成,那是大家能够设想针对单表的代码生成。

 

 

  1. 在左手【数据库视图】,选中表,右键菜单【单表代码生成器】

   如此方便的效应,不能不说很亲昵哦。

5.  应用安顿

  1. 点击【生成类代码】:

 

备考:代码还应该有一对扭转准则,是在菜单【工具】-【选项】-【代码生成设置】中开展设置。

运转运转登陆页面login.aspx,输入客商名:admin,密码:1  

浮动的代码,能够直接复制到项目文件中,也能够右键保存成CS文件。

在地点文本框,可以一向输入Access库的文书地方,注意:库文件尽量不要放在桌面,而且保障您的公文地方正确。假若你的Access并从未安装密码,上面的密码能够不用管。

BuilderModel  Model层的代码生成组件

3.        代码转换职能

停止现身“项目工程生成成功”提醒,项目转移完毕。

三.        注册数据库连接

习以为常费用,表一多,是否就咳嗽每种字段什么看头,以致数据库总是变,文书档案维护起来很麻烦。特别是新妇出席项目团队时,如果未有数据库文档,那么特别云里雾里的搞不清各类数码的情致。动软.NET代码生成器,能够帮您化解这些标题,它能够依据选定的数据库和表批量生成全部表的字段详细消息,包含暗中同意值,描述等表构造消息。免去手工业写文书档案和保证的麻烦,真的不要加班熬夜,能够早回家了。

BuilderBLLComm    基于专门的学业的事情逻辑层代码(BLL)

 

  1. 接下来,点击【生成代码】开关,就能够生成该类的代码:

2.  并在类中using

 

相关组件表达:

  1. 入选要转移的数据库,然后选西藏中华工程公司具栏【生成数据库文档】按键。

十二.        转换数据库文档

在数据库上,右键【新建查询】,或然选取菜单【工具】-【查询解析器】,张开查询语句窗口,输入我们的询问语句,然后单击右键,接纳【生成当前查询结果的多少脚本】:

  1. 慎选【新建查询】菜单,即现身SQL的询问分析器窗口,能够输入SQL语句进行查询。
  2. 在表上,右键接纳【浏览表数据】,能够查看表的多寡内容。

批量转换代码只生成业务表的代码,不再有减轻方案文件和品种文件,以至任何类库等。咱们得以将扭转的这几个文件直接拖到现存的解决方案中就能够。

代码生成的规规矩矩设置限定还在再三加码中。

 

 

  1. 设置成功后,在始发-菜单和桌面上会有动软.NET代码生成器的Logo。

 

 

 

十.    自动生成存款和储蓄进程

 

 

 

 

 

 

 

七.        单表代码生成

其余,差别数据库类型的数据类型各有不一致,这里提供了字段类型和C#中的类型组建映射关系,生成代码时将按映射关系来扭转代码字段属性的类型。

 

 

版权全体 © 二零零二-二〇一一 动软

 

 

  1. 2.  体系揭发效能

 

  1. 1.  寻找表功用

BuilderDALParam        数据访问层(DAL)基于Parameter格局的代码生成组件(推荐卡塔尔(قطر‎

 

二.        下载安装

对于习于旧贯使用存款和储蓄进程的客商,手写表的增、删、改、查的蕴藏进程也是十一分头大的职业,动软提供了足以自动生成数据表增加和删除改查的贮存进程脚本生成。

备考:代码还或然有部分变动准则,是在菜单【工具】-【选项】-【代码生成设置】中实行安装。

 

1.  引用
Lib文件夹下提供了接口类库,增添4个dll的援用:
LTP.CodeHelper.dll
LTP.IBuilder.dll
LTP.IDBO.dll
LTP.Utility.dll

    除却,大家能够见到,还应该有四个十一分紧凑的意义,正是假设数量访问层使用的是依附SQL拼接的点子的DAL,不时候为了拼写一段长达SQL语句,眼都看花了,看看动软这几个效应吗:

BuilderDALProc     数据访问层(DAL)基于存款和储蓄进度形式的代码生成组件

  1. 当选数据库,然后右键:【新建NET项目】,大概直接点工具栏上的快速Logo均可。

  或 点击第1个按钮

 

在表上,右键选用【生成存款和储蓄进度】

 

  1. 单表的仓库储存进程生成:

 

  1. 依据查询结果生成数据脚本。

 

  1. 下一场,选中须要转移的表

九.    代码生成准则设置

  1. 并发的窗口和新建项目基本雷同,只是多了叁此中选结构的选项。

 

 

动软.Net代码生成器
是一款为.Net程序猿设计的电动代码生成器,也是几个智能化软件开辟平台,它能够生成基于面向对象的思辨和三层布局划虚构计的代码,结合了软件开采中卓越的思虑和设计情势,融合了工厂格局,反射机制等等一些心想。首要实今后对应数据库中表的基类代码的自动生成,包罗生成属性、增多、改进、删除、查询、存在性、Model类构造等根底代码片断,扶植不相同布局代码生成,使程序员能够节省一大波机械录入的光阴和重复劳动,而将精力聚焦于大旨工作逻辑的付出。
动软代码生成器
同不日常候提供方便的开采管制效果和多项支出工作中常用到的扶持理工科程师具效用,您能够很有益于自在地扩充项目开支。

l  工厂方式布局:生成基于工厂方式的门类结构,切合二个等级次序大多据库类型的景色。

新建项目效果与利益只切合于第三次,因为不容许每一次都新建项目,极度是体系现已在支付中。所以,未来的类型开销中更加多的使用的是【批量代码生成】功效。批量代码生成特别适合项目早先时期追加代码时使用。

  1. 分选【加多服务器】,然后,现身“接受数据库类型”窗口

 

  1. 接下来,选取建设方案张开重复生成整个施工方案。整个成立项目进程即全部到位。

输入您自个儿设置过的Oracle的总指挥客户名和密码,服务正是安装的Oracle服务名,日常暗中同意是Oracle所在的机器名,若是不鲜明,请联系您的数据库管理员。

 

一.        产品介绍

 

1.        找寻表功用

3.  继承

  1. 3.  代码转换职能

现身生成SQL数据库脚本窗口,选用保存的公文名,点击【生成】就能够。

 

注意事项:

  1. 即使编写翻译没错误, 直接按F5键运转就能够。整个创制项目过程即一切完了。

假定急需加密,能够行使安装包里的加解密工具(官方下载该工具)。

 

五.        新建整个项目

在询问分析器中,测量试验大家的询问语句,然后,右键接纳【生成当前查询SQL语句的拼接代码】

 

一.    成品介绍

不经常大家并不像生成整个表的数码脚本,或然表相当的大,只怕其余数据并无需,只是须要有个别大家需求的多少,生成脚本后,奉行导入到其余库,当时我们得以接收动软代码生成器的这么些意义。

 

 

  1. 下一场,选用【继续设置】

安装落成后,首先要做的就是注册数据库的总是,因为具备的代码生吉达将从数据库中获取数据布局音讯实行转换。

 

  1. 依赖本身的实在乎况,选取一个机器上有的或和煦项目中在用的数据库类型。并保管您选取的数据库是足以平常访问的。然后,【下一步】。
  2. 比如选拔的是SQL Server,则相会世:

 

Codematic_Data.MDF和Codematic_Log.LDF 是通过动软新建项目中所带管理模块所须求的数据库文件。后台管理员暗许登入客商名:admin  密码:1

  1. 开荒生成的公文夹
  1. 张开web项目下web.config修正数据库连接字符串。

目录

 

 

 

五.    新建整个项目

文书档案编号:二〇一三0421

  1. 单表的数量脚本生成

 

 

 

十七.     生成数据库文书档案

 

 

 

支付步骤:

 

现实参照他事他说加以考察插件源码项目。安装包中提供了插件的源码。

 

此处的有着插入语句都将放在二个事情里产生。

2.        体系揭穿成效

 

要么,在表上右键,选拔【单表代码生成器】,能够更加灵活的定义生成存储进程

4.  接口方法

四.        查阅数据库消息

十.        自动生成存款和储蓄进度

 

九.        代码生成准绳设置

点击【设置】按键,我们得以设置公布的法则。

十四.        代码生成组件接口开荒

using LTP.Utility;
using LTP.IDBO;
using LTP.CodeHelper;

 

 

 

 

在【代码参数】或代码生成器窗口,即能够看来如下插件列表:

安装动软时,假如客商机器360弹出警报,那独有是个签订公约认证提醒,并不是木马,接受“继续设置”,然后点击“分明”就可以。

八.        父亲和儿子表代码生成(事务生成)

BuilderDALTranParam    数据访谈层(DAL)带有事务的代码生成组件

  1. 假定采取的是奥莱db
  1. 批量表的储存进度生成。

 

 

在数据库上,右键,选用【生成存款和储蓄进程】,大概选取【导出文件】-【存款和储蓄进程】。都将扭转整个数据库中全体表的蕴藏进度。

 

动软让软件开辟变得自在而高兴!让集团不断升迁开拓效用,相近的时日成立出更大的股票总值。

动软实战计策

动软.NET代码生成器帮衬可扩展的代码生成插件,客户可以依照接口定制自身的代码生成插件,开拓和谐的代码生成格局,按须要开展代码生成。

备注:代码还大概有一对浮动法则,是在菜单【工具】-【选项】-【代码生成设置】中实行设置。

十三.        常用工具

十六.     常用工具

 

十一.        自动生成数据库SQL脚本

 

【工具】-【选项】-【组件管理】 

Builder文本夹是代码生成插件的源码,动软.NET代码生成器援助可扩张的代码生成插件,顾客能够定制本身的代码生成的插件,依照接口开采自身的代码生成方式,按本身的必要进行代码生成。

  1. 选则要扭转的表,然后点击【导出】
  2. 在变化的文件夹中,大家得以见见:

则转移的本子仅仅富含语句询问结果的数码脚本:

 

注:“轻易三层布局” 近来偶尔是VS二零零七本子,是为了协作当前还在用二零零五的相爱的人。倘令你使用的是VS二〇〇九,生成项目后,请先张开VS二零一零,选用【菜单-文件-张开项目】的措施展开该类型,那时候会提醒进级项目版本,选取晋级一下门类版本到VS2009或VS二零一零就能够,对代码未有其它影响。

  1. 假诺选取的是SQLite

 

BuilderWeb    表示层的代码生成组件

平日开支中,日常会遇上老爹和儿子表的景观,相同的时间要求老爹和儿子表的记录封存必要在作业中贯彻,以保险数据的一致性。动软也在职能上做了那上头的设想。

  1. 假如选取的是MySQL

注意:新建项目后,请记得先将安装包里附带的数据库文件Codematic_Data.MDF 附加到SQLServer中。

 

三.    注册数据库连接

 

 

七.    单表代码生成

十七.     代码生成组件接口开拓

 

  1. 在软件分界面包车型客车左手数据库视图窗口,选择【服务器】,右键现身菜单:
  1. 接下来,选取项目项目和版本:

在线支持:

动软郑重注明: 动软.NET代码生成器,绝无插件木马,纯乌紫软件。请放心安装。

DAL由于不一致品类供给分裂,依据项目必要,选取中间一种办法就能够。

  1. 点击【开首调换】,则初叶开展代码的变迁

(1) 输入服务器IP地址,如若是本机也足以是:(local卡塔尔国 或是 . 或然 127.0.0.1。
    倘若服务器而不是独有贰个暗中同意实例,请选取:服务器实例名 的办法连接。
(2)必定要筛选和骨子里数据库服务器版本同样的选项,不然会变成接连几天数据库错误。
只顾:请使用SQLServer的集团版或职业版本,无法是SQL
EXPRESS版,不然无法连接。

(3)身份验证能够筛选是SQL Server认证,如故Windows认证。

 

即登陆动软系统框架的后台,分界面如下

  1. 批量表的数量脚本生成。
  1. 双击应用方案文件,展开全数项目如图:

 

 

 

 

 

十二.     自动生成数据库SQL脚本

抑或:在表上右键,选用【单表代码生成器】,能够越来越灵活的定义生成存款和储蓄进度。

 

父亲和儿子表的代码生成分3步窗体:1,2,3,当前先是个窗体首要安装父表和子表,以至双方主外键关联的字段。

 

 

 

 

  1. 点击【下一步】,采用要调换的表和配置:
  1. 入选数据库或许表,然后单击右键菜单【代码批量生成】

 

经过窗体上边包车型地铁Tab按键可以来回切换设计视图和代码。

DAL数据访谈层模板组件:public class BuilderDAL :
LTP.IBuilder.IBuilderDAL
BLL业务逻辑层模板组件:public class BuilderBLL :
LTP.IBuilder.IBuilderBLL

 

 

BuilderDALSQL      数据访问层(DAL)基于SQL拼接情势的代码生成组件

 

这么些配置保存后,在转移代码的时候将遵守这么些准绳进行转移。

当Web项目支出实现,我们日常要求把项目揭发到一个测验服务器可能临盆条件去,但表露的时候,只想昭示大家要求发布的文件,大概不想昭示部分大家没有必要的文书。即使VS.NET自带的有发布作用,但神蹟认为接收起来还不是那么灵活方便,动软提供了此成效,令你越来越灵敏,简捷的昭示网址文件。

四.    查看数据库新闻

八.    父亲和儿子表代码生成(事务生成)

 

 

 

 

 

  1. 如果选拔的是Oracle
  1. 开荒Web项目,选中刚才接收生成的那多少个表的页面文件夹,右键【包涵在品种中】

Codematic2.msi  是动软.NET代码生成器的安装文件。

 

根本通过以下多少个地方进行转移:

 

  1. 然后,现身单表的代码生成器界面,大家设置本人须求改换的信息。

 

 

  1. 在上述步骤分明后,动软.NET代码生成器的数据库视图就涌出了数据库服务器的新闻。
  1. 在表上,右键,选取【父亲和儿子表代码生成(事务)】:

 

l  轻易三层组织:生成规范的三层结构项目。

那是最先版本留下了的二个代码转变工具,能够扶植C#代码到VB代码的转变。

选用菜单【工具】-【web项目揭露】

 

双击接受要转移的表,选到右边手列表框。然后点击【伊始转换】就可以。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图