为组合类创建 DAO 类的正确方法是什么

问题描述

我正在做这个具有“C”和/或“D”类公共属性的“B”类,我将在其父类“A”中实现这些属性,例如继承人员值的客户和员工,在这种情况下,我正在替换组合的继承,现在我不想使用 ORM 框架,我是否会有 BDAO 和 CDAO,这会唤起 ADAO 在 BD 中进行关联或在 B 和 C 表中创建每个 A 属性?>

 public class A{
 public long ID;
 public int attributeA;
 }
 public class B{
 public long ID;
 public int attributeB;
 A a = new A();
 }
 public class C{
 public long ID;
 public int attributeC;
 A a = new A();     
 }

 public class Main{
 public static void main(String[] args) 
 {
 B bObject = new B();
 bObject.attributeB=0;
 A aObject = new A();
 aObject.attributeA=1;
 bObject.A=a;
 }
 }

 public class BDAO{
 public void add(B b){
 Conn.preparedStatement("insert into bTable (id,attributeB,FK_idA) 
values("b.ID+","+b.attributeB+","+b.A.id+")").execute();
 new ADAO().add(B.a);
 }
 }

 public class CDAO{
 public void add(C C){
 Conn.preparedStatement(...
 new ADAO().add(A.a);
 }
 }

 public class ADAO{
 public void add(A a){
 Conn.preparedStatement("insert into aTable (id,attributeA)
 values ("a.ID+","+a.attributeA+")").execute();
 }
 }

解决方法

如果您使用的是 Java 14 及更高版本,则可以使用 record 类来创建 DO 。

public record A(long ID,int attributeA){}
public record B(long ID,int attributeB,A a){}
public record C(long ID,int attributeC,A a){}

您不必编写 getter 方法和其他东西。

有关更多信息,请参阅 https://blogs.oracle.com/javamagazine/records-come-to-java

Tutorial

,

我认为您应该像这样使用 composite design patternDTO

import lombok.AllArgsConstructor;
import lombok.ToString;

@ToString
@AllArgsConstructor
class A {
    public long ID;
    public int attributeA;
}

@ToString
@AllArgsConstructor
class B {
    public long ID;
    public int attributeB;
}

@ToString
@AllArgsConstructor
class C {
    public long ID;
    public int attributeC;
}

// DTO class
@AllArgsConstructor
class ABC {
    public long ID;
    public int attributeA;
    public int attributeB;
    public int attributeC;
}

class ADAO{
    public void add(A a){
        // query
        System.out.println("add a: " + a);
    }
}

class BDAO{
    public void add(B b){
        // query
        System.out.println("add b: " + b);
    }
}


class CDAO{
    public void add(C c){
        // query
        System.out.println("add c: " + c);
    }
}

// composite class
@AllArgsConstructor
class ABCService {
    private final ADAO adao;
    private final BDAO bdao;
    private final CDAO cdao;

    public void add(ABC abc) {
        adao.add(new A(abc.ID,abc.attributeA));
        bdao.add(new B(abc.ID,abc.attributeB));
        cdao.add(new C(abc.ID,abc.attributeC));
    }
}

public class Main{
    public static void main(String[] args) {
        ABCService abcService = new ABCService(new ADAO(),new BDAO(),new CDAO());
        abcService.add(new ABC(1,123,456,789));
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...