728x90
ServerApp → Collection ←→ 파일 이라는 경로였는데 이제는 DBMS으로 변경한다
1단계 - 프로젝트에 JDBC 드라이버를 설정한다.
build.gradle 변경
2단계 - DBMS에 데이터를 저장할 테이블을 생성한다.
ddl.sql 파일의 SQL 실행
3단계 - DBMS를 이용하여 회원 데이터를 저장하고 로딩한다.
MariadbMemberDao 클래스를 생성 → JDBC API를 사용
4단계 - DBMS를 이용하여 프로젝트 데이터를 저장하고 로딩한다.
MariadbProjectDao 클래스를 생성 → JDBC API를 사용
프로젝트 목록을 가져올 때 멤버 목록도 함께 가져오기
ver1:
@Override
public List<Project> findAll() throws Exception {
try (PreparedStatement stmt = con.prepareStatement(
"select"
+ " p.project_no,"
+ " p.title,"
+ " p.start_dt,"
+ " p.end_dt,"
+ " m.member_no owner_no,"
+ " m.name owner_name,"
+ " m.email owner_email,"
+ " m2.member_no member_no,"
+ " m2.name member_name,"
+ " m2.email member_email"
+ " from"
+ " pms_project p"
+ " inner join pms_member m on p.member_no=m.member_no"
+ " left outer join pms_project_member pm on p.project_no=pm.project_no"
+ " inner join pms_member m2 on pm.member_no=m2.member_no"
+ " order by"
+ " project_no desc, m2.name asc");
ResultSet rs = stmt.executeQuery()) {
ArrayList<Project> list = new ArrayList<>();
int projectNo = 0;
Project project = null;
while (rs.next()) {
if (projectNo != rs.getInt("project_no")) {
project = new Project();
project.setNo(rs.getInt("project_no"));
project.setTitle(rs.getString("title"));
project.setStartDate(rs.getDate("start_dt"));
project.setEndDate(rs.getDate("end_dt"));
Member owner = new Member();
owner.setNo(rs.getInt("owner_no"));
owner.setName(rs.getString("owner_name"));
owner.setEmail(rs.getString("owner_email"));
project.setOwner(owner);
list.add(project);
projectNo = project.getNo();
}
// 프로젝트의 멤버가 있다면 기존 멤버 목록에 추가한다.
if (rs.getString("member_name") != null) {
Member member = new Member();
member.setNo(rs.getInt("member_no"));
member.setName(rs.getString("member_name"));
member.setEmail(rs.getString("member_email"));
project.getMembers().add(member);
}
}
return list;
}
}
프로젝트 목록을 가져온 후 각 프로젝트에 대해 멤버 목록을 가져오기
ver2:
@Override
public List<Project> findAll() throws Exception {
try (PreparedStatement stmt = con.prepareStatement(
"select"
+ " p.project_no,"
+ " p.title,"
+ " p.start_dt,"
+ " p.end_dt,"
+ " m.member_no,"
+ " m.name,"
+ " m.email"
+ " from pms_project p"
+ " inner join pms_member m on p.member_no=m.member_no"
+ " order by project_no desc");
PreparedStatement stmt2 = con.prepareStatement(
"select"
+ " pm.project_no, "
+ " m.member_no,"
+ " m.name,"
+ " m.email"
+ " from "
+ " pms_project_member pm"
+ " inner join pms_member m on pm.member_no=m.member_no"
+ " where"
+ " pm.project_no=?"
+ " order by "
+ " m.name asc");
ResultSet rs = stmt.executeQuery()) {
ArrayList<Project> list = new ArrayList<>();
while (rs.next()) {
Project project = new Project();
project.setNo(rs.getInt("project_no"));
project.setTitle(rs.getString("title"));
project.setStartDate(rs.getDate("start_dt"));
project.setEndDate(rs.getDate("end_dt"));
Member owner = new Member();
owner.setNo(rs.getInt("member_no"));
owner.setName(rs.getString("name"));
owner.setEmail(rs.getString("email"));
project.setOwner(owner);
// 프로젝트의 멤버 목록 가져오기
stmt2.setInt(1, project.getNo());
try (ResultSet memberRs = stmt2.executeQuery()) {
while (memberRs.next()) {
Member member = new Member();
member.setNo(memberRs.getInt("member_no"));
member.setName(memberRs.getString("name"));
member.setEmail(memberRs.getString("email"));
project.getMembers().add(member);
}
}
list.add(project);
}
return list;
}
}
5단계 - DBMS를 이용하여 게시글 데이터를 저장하고 로딩한다.
'DB' 카테고리의 다른 글
mybatis - Data Persistence Framework, SqlSession 사용법, SQL 문에 삽입할 파라미터 전달하기 (0) | 2021.10.21 |
---|---|
DBMS에 SQL문 보내기 : select,update,delete, FK 가 참조하는 데이터 지우는 방법, insert 한 후 auto increment PK 값 리턴 받기 (0) | 2021.10.20 |
Join, 서브쿼리, 그룹으로 묶기 (0) | 2021.10.11 |
FK(Foreign Key) (0) | 2021.10.11 |
DQL(Data Query Language) (0) | 2021.10.11 |