DaoとDtoとDBの関係をJavaコードで確認

DaoとDtoとDBの関係をJavaコードで確認します。
確認環境 (Eclipse4.8、Java 8)

目次 DAOとDTOとDBの関係
  DTOとは
  DAOとは
  利用するクラスのサンプル

DAOとDTOとDBの関係

DAOとDTOとDB(データベース)の関係の概念図です。

DTOとは

  • データベースから取得した値を格納します。
  • Data Transfer Objectの略です。
  • ゲッター(get)とセッター(set)を使用して値を操作します。
    →セッターは、DBから取得した値をセット(set)するために使用します。
    →ゲッターは、画面表示等で値を取得(get)するために使用します。
  • 1つのDtoのインスタンスは、データベースの1行のイメージです。
  • エンティティとも呼ばれます。
  • JavaBeansとも呼ばれます。
  • 読み方はディーティーオーです。
  • 以下は、wikipediaのDTOのリンクです。
    https://ja.wikipedia.org/wiki/Data_Transfer_Object

DTOのクラスのサンプルです。

package test1;

public class SyainDto {
    private int id;
    private String name;
	private String romaji;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRomaji() {
		return romaji;
	}
	public void setRomaji(String romaji) {
		this.romaji = romaji;
	}
}

4~6行目は、値です。
8~25行目は、値を取得するゲッターと値に設定するセッターです。

ゲッターとセッターは一般的に手で書きません。
プラグインのLombokやEclipseの機能を使用します。
Java Lombokのインストール(Eclipse)
Eclipse Javaのgetter/setterを自動で作成する方法

DAOとは

  • データベースの接続情報を持ち、データベースにアクセスしてデータの取得や操作を行います。
  • Data Access Objectの略です。
  • 取得した値はDTOに格納します。
  • 読み方はダオです。
  • 以下は、wikipediaのDAOのリンクです。
    https://ja.wikipedia.org/wiki/Data_Access_Object

DAOのクラスのサンプルです。

package test1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class SyainDao {
	private static final String URL 
    	= "jdbc:mysql://localhost:3306/testphp?serverTimezone=JST";
	private static final String USER = "root";
	private static final String PASS = "";
	private static final String SQL 
		= "select * from syain;";

    public List<SyainDto> findAll() {
        List<SyainDto> syainList = new ArrayList<>();
        
	    try(Connection conn = 
	            DriverManager.getConnection(URL, USER, PASS);
	        PreparedStatement ps = conn.prepareStatement(SQL)){

	        try(ResultSet rs = ps.executeQuery()){
	            while (rs.next()) {
	            	SyainDto sd = new SyainDto();
	            	sd.setId(rs.getInt("id"));
	            	sd.setName(rs.getString("name"));
	            	sd.setRomaji(rs.getString("romaji"));
	            	syainList.add(sd);
	            }           
	        }
	    } catch (SQLException e) {
	        e.printStackTrace();
	    } catch (Exception e) {
	        e.printStackTrace();
	    } finally {
	    }
        return syainList;
    }
}

12~15行目は、DBに接続するURL、ユーザ、パスワードの情報です。
20行目は、Dtoのクラスのリストを定義しています。
28~31行目は、Dtoのクラスをインスタンス化して、DBから取得した値をセットしています。1つのインスタンスがDBの1行のイメージです。
32行目は、Dtoのインスタンスをリストにセットしています。

利用するクラスのサンプル

上記DaoとDtoのクラスを利用するクラスです。

package test1;

import java.util.List;
import test1.SyainDao;
import test1.SyainDto;

public class Test1 {
    public static void main(String[] args) {        
    	SyainDao syainDao = new SyainDao();
    	List<SyainDto> sd = syainDao.findAll();
    	
        for (SyainDto s: sd) {
            System.out.println(s.getId());
            System.out.println(s.getName());
            System.out.println(s.getRomaji());
        }
    }
}

9行目は、Daoのクラスをインスタンス化しています。
10行目は、メソッドを実行しDtoのリストを取得しています。
12~15行目は、拡張for文でDBから取得した値を表示しています。

上記コードを動かす場合は、MySQLのドライバが必要です。
githubにコードがあります。
https://github.com/ut23405/Java/tree/main/Dto-Dao-Mysql

関連の記事

Java MySQLにJDBC接続してselectするサンプル
Java MySQLでデータ更新する(insert/update/delete)
Java 大量データを登録/更新する(addBatch)

△上に戻る