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に接続してselectするサンプル
Java MySQLでデータ更新する(insert/update/delete)
Java 大量データを登録/更新する(addBatch)