我已阅读有关数据类型的this question。我如何处理这些事情以及数据库?我所知道/理解的:与普通类相比,如果数据类类具有相同的属性值,则应认为它们是相等的。
示例:
// Using Java here just as pseudo code. Personally, I don't use Java.
class Car {
public Color color;
}
// But here I'm not sure. Is this better?
class Color {
static String RED = 'red';
static String BLACK = 'black';
public String value; // gets a value from class constants
}
// Or this?
class Color {
static int RED = 1;
static int BLACK = 2;
public int value; // gets a value from class constants
}
而且我也不知道我是否需要db中的两个表(汽车,颜色)或只需一个。颜色应该是硬编码的,而不是存储在db?
中抱歉,如果我无法清楚地描述我的问题。我希望任何人都能提供一个例子。但我想如果我只是在表中添加一个Varchar列,以便每个记录都有一个字符串'red'或'black'(或其他颜色),每个人都会建议我使用另一个表格来表示颜色并建立一个关系表格。没关系。但是再次在代码中,如果我想获得颜色,我总是需要引用值属性 - 例如如果我想在UI中显示颜色(字符串),我总是需要做carObj.color.value,而不仅仅是更加直观的carObj.color,IMO。 ......有些事我不理解。
任何人都可以在何时以及如何使用数据类型类/对象时显示示例?
答案 0 :(得分:1)
嗯,他们说的是正确的,你应该在两个表中代表你的类型。 一个用于Car的表和一个用于与ID相关的颜色的表。
//rapresent a row of your table Car, an Entity
public class CarDTO {
private int idCar;
private String type;
private int idColor;
public ...// getters and setters here
//For your first question, about if types are equals, you need to implement the method
@Override
public boolean equals(Object obj) {
if (!(obj instanceof CarDTO )) {
return false;
}
CarDTO carToCompare = (CarDTO ) obj;
return (this.getIdCar() == carToCompare.getIdCar()
&& this.getType().equals(carToCompare.getType())
&& this.getIdColor() == carToCompare.getIdColor());
}
//rapresent a row of your table Color, an Entity
public class ColorDTO {
private int idColor;
private String color;
public ...// getters and setters here
//For your first question, about if types are equals, you need to implement the method
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ColorDTO )) {
return false;
}
ColorDTO colorToCompare = (ColorDTO ) obj;
return (this.getIdColor() == colorToCompare.getIdColor()
&& this.getColor().equals(colorToCompare.getColor()));
}
您有两个表示表格行的实体,而Car的idColor与颜色的idColor相关。 这些当然是您的代码目前不相关的类型,但您可以创建一个实体,它是您需要的信息的连接。例如查询:
SELECT c.idCar, c.type, co.colour FROM Car c, Colour co WHERE c.idColor = co.idColor
将成为您的行的表示的实体,连接查询的结果是:
public class CarAndColorDTO {
private int idCar;
private String type;
private String color;
public ...// getters and setters here
//...Equals here
}
您应该避免代码中的颜色硬编码,因为您需要在数据库中使用这些信息。 当然这是一个简单的解释,如果您使用Java,您应该看到JPA实体以获得更好的解释和易用性(Join,Foreign Keys,ecc ...)
还要注意代码中变量的封装:)
我希望这可以帮到你
答案 1 :(得分:0)
为什么不为Color使用枚举类型?
请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html