我很确定我没有做正确的课程相关的事情。
我正在使用一个类来创建一组变量(比如javascript对象可能但不是真的)。
我正在使用它,如下所示(基本示例)
public class myScript {
public static void main(String[] args) {
Client warehouse = new Client();
Contacts warehouseContactsA = new Contacts();
Contacts warehouseContactsB = new Contacts();
warehouse.idno = 1;
warehouse.name = "warehouse";
warehouse.desc = "I don't exist";
warehouseContactsA.client_idno = 1;
warehouseContactsA.email = "emailAAA@place.com"
warehouseContactsB.client_idno = 1;
warehouseContactsB.email = "emailBBB@place.com"
insertIntoDB(warehouse,
warehouseContactsA,
warehouseContactsB);
}
public static void insertIntoDB(Client warehouse,
Contacts warehouseContactsA,
Contacts warehouseContactsB) {
// code to insert into database here
}
private class Client {
int idno;
String name;
String desc;
}
private class Contacts {
int client_idno;
String email;
}
}
有没有理由不以这种方式使用类,如果有的话,有更简单的方法来存储/管理不需要类的数据?
答案 0 :(得分:2)
创建内部类可能会给你带来陷阱。当你没有将它们定义为静态时,它们需要一个隐式引用回到你的代码不需要的外部类,它只会妨碍并导致模糊的错误。也许你这样做,所以你只能编译一个类,避免使用构建脚本?使用gradle的简单构建脚本是微不足道的(不像我们使用ant时的旧时代),所以这应该不是问题。将持久性实体移到单独的文件中会更好。
您对数据库连接和事务的处理方式尚不清楚。通常,尝试在自己的事务中执行每个插入是不好的,只是因为每个事务都有开销并且它增加了插入需要运行的时间。通常,您需要批量处理插入。
但是,主要是,如果您正在编写脚本,请使用脚本语言。 Groovy可能是一个不错的选择:
答案 1 :(得分:1)
import java.util.Arrays;
import java.util.List;
public final class WarehouseRepository {
public static void main(String[] args) {
WarehouseRepository repository = new WarehouseRepository();
Client warehouse = new Client(1, "warehouse", "I don't exist");
Contacts warehouseContactsA = new Contacts(1, "emailAAA@place.com");
Contacts warehouseContactsB = new Contacts(1, "emailBBB@place.com");
repository.insertIntoDB(warehouse, Arrays.asList(warehouseContactsA, warehouseContactsB));
}
public void insertIntoDB(Client warehouse, List<Contacts> contacts) {
// code to insert into database here
}
}
final class Client {
private final int id;
private final String name;
private final String desc;
public Client(int id, String name, String desc) {
this.id = id;
this.name = name;
this.desc = desc;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
final class Contacts {
private final int clientName;
private final String email;
public Contacts(int clientName, String email) {
this.clientName = clientName;
this.email = email;
}
public int getClientName() {
return clientName;
}
public String getEmail() {
return email;
}
}
有些事情需要注意:
repository
List<Contact>
作为字段。答案 2 :(得分:0)
是的,这是一个足够好的代表。
不,这不理想。你可以改变一些事情来改善这种情况:
可见性选项1:使用访问者隐私
你可以通过你的&#34; bean&#34;来使事情变得更加个性化。类(即仅具有数据存储目的的对象,没有逻辑)字段为private,然后使用公共访问器来屏蔽内部表示:
public class Client {
private int id;
public int getId() { return this.id; }
public void setId(int id) { this.id = id; }
}
可见性选项2:使您的bean不可变
另一个选择是让你的bean不可变(这样你就可以在多线程环境中无意中传递它们)并且还保证它们被正确初始化并且没有人在非法状态下写入它们(例如,删除/清零id而不是其余数据):
public class Client {
public final int id;
public Client(int id) { this.id = id; }
}
最后,如果您有可能存在或不存在的内容(例如描述&#34;我不存在&#34;),我建议使用可选类型,而不是而不只是字符串类型。
答案 3 :(得分:0)
我会使用Map<String,String>
来存储属性。
我将String和int作为字符串存储在哪里,并在需要时将它们解析回来。
希望有所帮助