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

自动生成 POJO 类

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (7投票s)

2019年4月27日

CPOL

3分钟阅读

viewsIcon

10425

downloadIcon

159

本文解释了 POJO 类的生成

引言

POJO 是 Java 开发者之间非常基础和常见的概念。它代表 Plain Old Java Object(简单旧式 Java 对象),包含 getter 和 setter 方法。虽然这些类非常常见,但在代码编辑器或 IDE 中编写它们需要很长时间。在本文中,我将展示如何使用源代码生成器来缩短此过程。

背景

源代码生成并不是一个新概念;然而,它尚未被开发者广泛知晓。其思想是自动生成相似和重复的源代码部分,而不是手动编写,以提高效率。您可以在互联网上找到一些源代码生成工具,其中一些非常有效。然而,其工作原理可能有所不同。对于这个项目,我使用了 Zontroy 作为代码生成器,它是一个免费工具。为了清楚地解释如何自动生成我的类,我还需简要解释 Zontroy 的工作原理。但首先,为了使用生成器,您应该预先准备好数据库。因为该工具需要使用来自数据库的实体信息。无论如何,在您下载该工具后,您应该创建一个项目。然后,您需要选择希望如何生成代码。这里有不同的选项,该工具为此目的提供了三种独特的文件类型。您选择一个并将其添加到您的项目中,然后就可以开始了。您应该在该工具嵌入的代码编辑器中编写代码。您可以使用任何您想要的编程语言,但您还需要使用 zontroy 语言来修改您的代码。这是一种非常简单的语言,其主要目的是定义代码的哪些部分将根据数据库的不同实体而改变。当您准备好后,程序将生成与您选择的每个实体修改后的相同代码。然后,您可以将生成的代码添加到您的项目中。

数据库

我将用于此项目的示例数据库放在下面

(该数据库由 http://www.dofactory.com/sql/sample-database 提供。附件中提供了 MSSQL 和 Oracle 脚本。)

示例 POJO 类

由于我的数据库已准备就绪,我现在可以以正常方式编写我的 POJO 类。我需要为我的所有数据库实体提供这段代码。代码如下所示

(在编码之前,我选择了 zontroy 重复文件类型,因为我希望为所有实体提供单独的代码文件。我不会详细介绍 Zontroy 文件类型,因为它不是我们现在的主题。)

// 
// Sample.java
//

import java.util.*;
import java.text.*;

public class Sample {
  
    private int id;
    
    public int getId() {
        return id;   
    } 

    public void setId(int id) {
        this.id = id;   
    }   
}

代码修改

这是我使用 Zontroy 语言指定代码的哪些部分将根据我的数据库实体而改变的部分。修改后的代码如下所示

import java.util.*;
import java.text.*;

public class [[[table.name]]] {
   
    for(((item:table.columns))){{{       
    private [[[item.targetType]]] [[[item.targetName]]];
    }}}
  
    for(((item:table.columns))){{{       
    public [[[item.targetType]]] get[[[item.targetName]]]() {
        return [[[item.targetName]]];   
    } 

    public void set[[[item.targetName]]]([[[item.targetType]]] [[[item.targetName]]]) {      
        this.[[[item.targetName]]] = [[[item.targetName]]];   
    }   
    
    }}}
}

我所做的是用以下代码行将类名定义为表名,该代码行是我编写的代码的一部分

public class [[[table.name]]] {

类似地,我通过编写以下部分为每列定义了 private 变量

for(((item:table.columns))){{{       
    private [[[item.targetType]]] [[[item.targetName]]];
    }}}

以下部分是我在 for 循环中为每列编写 getter 和 setter 方法的地方。

getter 方法的返回类型是列的 targetType

列具有数据类型和目标类型。数据类型是数据库中的原始类型,例如 varchar2nvarchardatetime 等。目标类型是编程语言中列的类型。类似地,targetName 保留了用户定义的列名。

for(((item:table.columns))){{{       
    public [[[item.targetType]]] get[[[item.targetName]]]() {
        return [[[item.targetName]]];   
    } 

    public void set[[[item.targetName]]]([[[item.targetType]]] [[[item.targetName]]]) {      
        this.[[[item.targetName]]] = [[[item.targetName]]];   
    }   
    
    }}}

结果

当我完成编写代码后,我点击生成按钮。我提供了几个类的生成代码示例。

Supplier.java

import java.util.*;
import java.text.*;

public class Supplier {
   
    private int Id;
    private String CompanyName;
    private String ContactName;
    private String ContactTitle;
    private String City;
    private String Country;
    private String Phone;
    private String Fax;
  
    public int getId() {
        return Id;   
    } 

    public void setId(int Id) {      
        this.Id = Id;   
    }   
    
    public String getCompanyName() {
        return CompanyName;   
    } 

    public void setCompanyName(String CompanyName) {      
        this.CompanyName = CompanyName;   
    }   
    
    public String getContactName() {
        return ContactName;   
    } 

    public void setContactName(String ContactName) {      
        this.ContactName = ContactName;   
    }   
    
    public String getContactTitle() {
        return ContactTitle;   
    } 

    public void setContactTitle(String ContactTitle) {      
        this.ContactTitle = ContactTitle;   
    }   
    
    public String getCity() {
        return City;   
    } 

    public void setCity(String City) {      
        this.City = City;   
    }   
    
    public String getCountry() {
        return Country;   
    } 

    public void setCountry(String Country) {      
        this.Country = Country;   
    }   
    
    public String getPhone() {
        return Phone;   
    } 

    public void setPhone(String Phone) {      
        this.Phone = Phone;   
    }   
    
    public String getFax() {
        return Fax;   
    } 

    public void setFax(String Fax) {      
        this.Fax = Fax;   
    }   
    
}

Product.java

import java.util.*;
import java.text.*;

public class Product {
   
    private int Id;
    private String ProductName;
    private int SupplierId;
    private double UnitPrice;
    private String Package;
    private Boolean IsDiscontinued;
  
    public int getId() {
        return Id;   
    } 

    public void setId(int Id) {      
        this.Id = Id;   
    }   
    
    public String getProductName() {
        return ProductName;   
    } 

    public void setProductName(String ProductName) {      
        this.ProductName = ProductName;   
    }   
    
    public int getSupplierId() {
        return SupplierId;   
    } 

    public void setSupplierId(int SupplierId) {      
        this.SupplierId = SupplierId;   
    }   
    
    public double getUnitPrice() {
        return UnitPrice;   
    } 

    public void setUnitPrice(double UnitPrice) {      
        this.UnitPrice = UnitPrice;   
    }   
    
    public String getPackage() {
        return Package;   
    } 

    public void setPackage(String Package) {      
        this.Package = Package;   
    }   
    
    public Boolean getIsDiscontinued() {
        return IsDiscontinued;   
    } 

    public void setIsDiscontinued(Boolean IsDiscontinued) {      
        this.IsDiscontinued = IsDiscontinued;   
    }   
    
}

Customer.java

import java.util.*;
import java.text.*;

public class Customer {
   
    private int Id;
    private String FirstName;
    private String LastName;
    private String City;
    private String Country;
    private String Phone;
  
    public int getId() {
        return Id;   
    } 

    public void setId(int Id) {      
        this.Id = Id;   
    }   
    
    public String getFirstName() {
        return FirstName;   
    } 

    public void setFirstName(String FirstName) {      
        this.FirstName = FirstName;   
    }   
    
    public String getLastName() {
        return LastName;   
    } 

    public void setLastName(String LastName) {      
        this.LastName = LastName;   
    }   
    
    public String getCity() {
        return City;   
    } 

    public void setCity(String City) {      
        this.City = City;   
    }   
    
    public String getCountry() {
        return Country;   
    } 

    public void setCountry(String Country) {      
        this.Country = Country;   
    }   
    
    public String getPhone() {
        return Phone;   
    } 

    public void setPhone(String Phone) {      
        this.Phone = Phone;   
    }   
    
}

Order.java

import java.util.*;
import java.text.*;

public class Order {
   
    private int Id;
    private Date OrderDate;
    private String OrderNumber;
    private int CustomerId;
    private double TotalAmount;
  
    public int getId() {
        return Id;   
    } 

    public void setId(int Id) {      
        this.Id = Id;   
    }   
   
    public Date getOrderDate() {
        return OrderDate;   
    } 

    public void setOrderDate(Date OrderDate) {      
        this.OrderDate = OrderDate;   
    }   
   
    public String getOrderNumber() {
        return OrderNumber;   
    } 

    public void setOrderNumber(String OrderNumber) {      
        this.OrderNumber = OrderNumber;   
    }   
   
    public int getCustomerId() {
        return CustomerId;   
    } 

    public void setCustomerId(int CustomerId) {      
        this.CustomerId = CustomerId;   
    }   
  
    public double getTotalAmount() {
        return TotalAmount;   
    } 

    public void setTotalAmount(double TotalAmount) {      
        this.TotalAmount = TotalAmount;   
    }   
}  

OrderItem.java

import java.util.*;
import java.text.*;

public class OrderItem {
   
    private int Id;
    private int OrderId;
    private int ProductId;
    private double UnitPrice;
    private int Quantity;
  
    public int getId() {
        return Id;   
    } 

    public void setId(int Id) {      
        this.Id = Id;   
    }   
    
    public int getOrderId() {
        return OrderId;   
    } 

    public void setOrderId(int OrderId) {      
        this.OrderId = OrderId;   
    }   
    
    public int getProductId() {
        return ProductId;   
    } 

    public void setProductId(int ProductId) {      
        this.ProductId = ProductId;   
    }   
    
    public double getUnitPrice() {
        return UnitPrice;   
    } 

    public void setUnitPrice(double UnitPrice) {      
        this.UnitPrice = UnitPrice;   
    }   
    
    public int getQuantity() {
        return Quantity;   
    } 

    public void setQuantity(int Quantity) {      
        this.Quantity = Quantity;   
    }   
    
}

关注点

Java Bean 可以像这样轻松生成。我相信代码生成器将在大约 5 年内在软件开发中得到广泛使用。我建议您使用代码生成工具来提高效率并节省作为开发人员的时间。

© . All rights reserved.