RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 918857
Accepted
Teemitze
Teemitze
Asked:2020-12-12 14:54:06 +0000 UTC2020-12-12 14:54:06 +0000 UTC 2020-12-12 14:54:06 +0000 UTC

Java中的DTO是什么?

  • 772

您能否使用简单的 JAVA 代码示例来解释 DTO 是什么?为什么需要这个?

这段代码会是 DTO 吗?有两个类客户和银行

顾客

    import java.sql.Date;

class Customer {
    private String first_name;
    private String last_name;
    private String gedner;
    private Date age;
    private String address;


    Customer(String first_name, String last_name, String gedner, Date age, String address) {
        this.first_name = first_name;
        this.last_name = last_name;
        this.gedner = gedner;
        this.age = age;
        this.address = address;
    }

    public String getLast_name() {
        return last_name;
    }

    public String getFirst_name() {
        return first_name;
    }

    public String getGedner() {
        return gedner;
    }

    public Date getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }
}

银行

import java.sql.*;
import java.util.Scanner;


public class Bank {
    private static final String URL = "jdbc:mysql://localhost/bank?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "root";

    Connection connection = null;
    PreparedStatement preparedStatement = null;
    Scanner in = new Scanner(System.in);

    public void connect() {
        try {
            connection = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    Customer readCustomer() {
        Customer customer = null;
        try {
            preparedStatement = connection.prepareStatement("SELECT * FROM customers WHERE id_customer = ?");
            System.out.print("Введите id пользователя: ");
            preparedStatement.setInt(1, Integer.parseInt(in.next()));
            preparedStatement.execute();
            ResultSet rs = preparedStatement.executeQuery();
            String first_name = rs.getString("first_name");
            String last_name = rs.getString("last_name");
            String gender = rs.getString("gender");
            Date age = rs.getDate("age");
            String address = rs.getString("address");
            customer = new Customer(first_name, last_name, gender, age, address);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                preparedStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return customer;
    }
}

在 read 方法中,我将 ResultSet 变成了一个客户对象。这是DTO吗?

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Anton Sorokin
    2020-12-12T15:32:23Z2020-12-12T15:32:23Z

    对象Customer- DTO。

    DTO 对象是不包含方法的对象。它只能包含字段、getter/setter 和构造函数。

    数据传输对象 - 传输数据的对象。数据是类中的字段。

    一个真实的例子是跳棋游戏。您必须有一个对象Checker(检查器)。它不应该有方法,只有字段。

    public class Checker {
        private COLOR checkerColor;
        private Coordinate coordinate; //show checker coordinate
        private boolean isQueen; //show is the checker queen
    
        public Checker(COLOR checkerColor, int xCoordinate, int yCoordinate) {
            this.checkerColor = checkerColor;
            coordinate = new Coordinate(xCoordinate, yCoordinate);
            isQueen = false;
        }
    
        public Checker() {}
    
        public COLOR getColor() {
            return checkerColor;
        }
    
        public Coordinate getCoordinate() {
            return coordinate;
        }
    
        public boolean isQueen() {
            return isQueen;
        }
    
        public void setCoordinate(Coordinate coordinate) {
            this.coordinate.setCoordinates(coordinate.getX(), coordinate.getY());
        }
    
        public void setQueen() {
            isQueen = true;
        }
    }
    

    或一类Cell(棋盘)。

    public class Cell {
    
        private boolean isBusy; //shows does the field is occupied with the checker
        private Coordinate coordinate; //show field coordinate
    
        public Cell(boolean isBusy, int x, int y) {
            coordinate = new Coordinate(x, y);
            this.isBusy = isBusy;
        }
    
        public Cell() {}
    
        public boolean isBusy() {
            return isBusy;
        }
    
        public void setBusy(boolean isBusy) {
            this.isBusy = isBusy;
        }
    
        public Coordinate getCoordinate() {
            return coordinate;
        }
    }
    

    或类Board(板):

    public class Board {
    
        private List<Cell> cells; //list with 64 Fields()
        private List<Checker> checkers; //list with Checkers(), whose number falls from 24 to 0
    
        public Board() {
            cells = new LinkedList<>();
            checkers = new LinkedList<>();
        }
    
        public List<Cell> getCells() {
            return cells;
        }
    
        public List<Checker> getCheckers() {
            return checkers;
        }
    }
    

    还是一类Coordinate。虽然它有方法(重写equals和compare),但这些是来自的方法Object,它也可以被认为是一个 DTO 对象,因为 它仅用于存储数据(坐标)。

    public class Coordinate {
    
        private int x; //x coordinate
        private int y; //y coordinate
    
    
        public Coordinate(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        public int getX() {
            return x;
        }
    
        public void setX(int x) {
            this.x = x;
        }
    
        public int getY() {
            return y;
        }
    
        public void setY(int y) {
            this.y = y;
        }
    
        public void setCoordinates(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            Coordinate that = (Coordinate) o;
    
            return x == that.x && y == that.y;
        }
    
        public boolean compare(Coordinate that, int xMove, int yMove) {
            return x == that.getX() + xMove
                    && y == that.getY() + yMove;
       }
    
    • 5

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5