自动生成 POJO 类
本文解释了 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
。
列具有数据类型和目标类型。数据类型是数据库中的原始类型,例如 varchar2
、nvarchar
、datetime
等。目标类型是编程语言中列的类型。类似地,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 年内在软件开发中得到广泛使用。我建议您使用代码生成工具来提高效率并节省作为开发人员的时间。