65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Java 和 Eclipse 构建 ORM 对象和存储过程(来自 ERD)

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016年3月30日

CPOL

2分钟阅读

viewsIcon

12807

ORM 对象和基本的 CRUD 操作过程是在建立数据库的第一个版本之后的第一阶段任务。这个基于 Java 的代码生成工具构建这些类和存储过程。

引言

构建 ORM 类和存储过程对于初级程序员来说是一个很好的练习,但它的新奇感会逐渐消失,然后就该寻找更好的方法了。每当我发现自己在不同的项目中反复做同样的事情时,我就会开始寻找过程的捷径。这是我尝试构建一个代码生成工具,该工具可以构建您将从 ERD 创建的 ORM 类和存储过程。我想构建一个简单的工具,可以跨各种数据库使用,并为各种语言构建源文件。有很多商业产品更复杂、更昂贵、功能更多,但在许多情况下,它可以满足我的目的。

背景

第一个版本为 Sqlserver 构建存储过程(SELECT ONE、SELECT ALL、INSERT、UPDATE、DELETE),并且可以根据您如何设置配置,以 Java、C# 或 VB.NET 构建您的 ORM 对象。它可以很容易地扩展到与其他数据库一起工作。有很多工具可以做同样的事情,并在这种类型的功能方面走得更远,但我想要一些简单的东西用于我的目的。我喜欢能够看到事物的源代码并根据需要更改/扩展它们或简化它们。我的日常工作是 C#,Sqlserver 是我在这里的重点。我选择用 Java 编写这个程序,没有特别的原因。我使用 Eclipse 编写了这段代码。我在这里包含了所有源代码。
 

使用代码

有 4 个包,大约 14 个类。程序的入口点是下面列出的 Main.java。请确保根据您的需要设置配置。我定义了几个枚举来帮助做出好的选择。目前只实现了 Microsoft Sqlserver 数据库过程构建器。Java、C# 和 VB.NET 都在类生成端构建,但您必须在 Main.java 中定义语言,如下所示。创建并准备好具有可写权限的文件夹,以接受创建的文件。我在 AdventureWorks2012 数据库上测试了这个,它非常大,没有任何问题。目前没有办法跳过某些表,因此您可能会为那些您不需要 ORM 类的表抛弃一些类和过程。这个程序不会为您做任何复杂的 SQL 逻辑或类关系构建。它为它看到的每个表编写一个类,并为它看到的每个表编写五个存储过程。

 

package builder;

import common.DatabaseServerType;
import common.DomainObjectLanguage;
import common.ProcedureBuildType;
import domainclassbuilder.CSharpClassWriter;
import domainclassbuilder.JavaClassWriter;
import domainclassbuilder.VisualBasicClassWriter;
import sqlprocedurebuilder.MSSQLProcBuilder;
import sqlprocedurebuilder.MSSQLProcWriter;
import sqlprocedurebuilder.ProcBuilder;


public class Main {
    
      
    public static void main(String[] args) {
        
        DatabaseServerType lDatabaseServerType = DatabaseServerType.MICROSOFTSQLSERVER;
        ProcedureBuildType lProcedureBuildType = ProcedureBuildType.ONEFILEALLTABLES;
        DomainObjectLanguage lDomainObjLang = DomainObjectLanguage.VISUALBASIC;
                
        String lAbsoluteProcedureDirectoryLocation = "C:/Build/Procedures";
        String lAbsoluteClassDirectoryLocation = "C:/Build/Classes";
        String lDbName = "NOP360DEV";        
        String lDbConnection = "jdbc:sqlserver://RHODES-PC\\RHODES_HOME_PC;database=NOP360DEV";        
        String lDbUser = "sa";        
        String lDbPassword = "password";
        String lAuthor = "Giancarlo Rhodes";
        String lOneFileName = "AllProcedures.SQL";
        
        ProcBuilder lProcBuilder = null; 
                
        switch (lDatabaseServerType){
        
        case MICROSOFTSQLSERVER:
                                    
            ProcBuilder._dbname = lDbName;
            ProcBuilder._dbconnection = lDbConnection;
            ProcBuilder._dbusername = lDbUser;
            ProcBuilder._dbuserpassword = lDbPassword;
            
            //MSSQLProcBuilder lMSSQLProcBuilder = new MSSQLProcBuilder(ProcBuilder._dbname, ProcBuilder._dbconnection, ProcBuilder._dbusername, ProcBuilder._dbuserpassword);                            
            lProcBuilder =  new MSSQLProcBuilder(ProcBuilder._dbname, ProcBuilder._dbconnection, ProcBuilder._dbusername, ProcBuilder._dbuserpassword);
            
            // lMSSQLProcBuilder.PrintTables();   // TESTING
            // lMSSQLProcBuilder.PrintAllMetaRows();  //  TESTING
            MSSQLProcWriter lMSSQLProcWriter = new MSSQLProcWriter(lAbsoluteProcedureDirectoryLocation, lProcBuilder);
            lMSSQLProcWriter.Write(lProcedureBuildType, lAuthor, lOneFileName);
            break;
            
        case ORACLE:                        
            // TODO - IMPLEMENT
            break;
                        
        case MYSQL:
            
            // TODO - IMPLEMENT
            break;
            
        default:
            break;
                
        }
         
        
        switch (lDomainObjLang){
                        
        case VISUALBASIC:
                
            //if (lDatabaseServerType == DatabaseServerType.MICROSOFTSQLSERVER){
            //    lProcBuilder = new MSSQLProcBuilder(ProcBuilder._dbname, ProcBuilder._dbconnection, ProcBuilder._dbusername, ProcBuilder._dbuserpassword);    
            //}else if(lDatabaseServerType == DatabaseServerType.ORACLE){
            //    // TODO - IMPLEMENT
            //}else if(lDatabaseServerType == DatabaseServerType.MYSQL){
            //    // TODO - IMPLEMENT
            //}
            VisualBasicClassWriter lVBClassWriter = new VisualBasicClassWriter(lAbsoluteClassDirectoryLocation, lProcBuilder, lAuthor, lDatabaseServerType);                
            lVBClassWriter.BuildAllClasses();
            break;
                    
        case CSHARP:
            
            if (lDatabaseServerType == DatabaseServerType.MICROSOFTSQLSERVER){
                lProcBuilder = new MSSQLProcBuilder(ProcBuilder._dbname, ProcBuilder._dbconnection, ProcBuilder._dbusername, ProcBuilder._dbuserpassword);    
            }else if(lDatabaseServerType == DatabaseServerType.ORACLE){
                // TODO - IMPLEMENT
            }else if(lDatabaseServerType == DatabaseServerType.MYSQL){
                // TODO - IMPLEMENT
            }
                        
             CSharpClassWriter lCSharpClassWriter = new CSharpClassWriter(lAbsoluteClassDirectoryLocation, lProcBuilder, lAuthor, lDatabaseServerType);    
             lCSharpClassWriter.BuildAllClasses();
            break;
                        
        case JAVA:
            
            if (lDatabaseServerType == DatabaseServerType.MICROSOFTSQLSERVER){
                lProcBuilder = new MSSQLProcBuilder(ProcBuilder._dbname, ProcBuilder._dbconnection, ProcBuilder._dbusername, ProcBuilder._dbuserpassword);    
            }else if(lDatabaseServerType == DatabaseServerType.ORACLE){
                // TODO - IMPLEMENT
            }else if(lDatabaseServerType == DatabaseServerType.MYSQL){
                // TODO - IMPLEMENT
            }
            
             JavaClassWriter lJavaClassWriter = new JavaClassWriter(lAbsoluteClassDirectoryLocation, lProcBuilder, lAuthor, lDatabaseServerType);    
             lJavaClassWriter.BuildAllClasses();
            break;
                        
        default:
            break;
            
        }
                              
    }
                   
}

 

 

关注点

从 zip 获取代码或最新版本在

https://github.com/grhodes29/ProcDomBuilder

历史

版本 1 - 2016/3/27

© . All rights reserved.