Java 일지 #21 (20210827) 수강신청 등록, 조회
21. 수강 신청 등록, 조회
-수강 신청 등록, 조회
*db, 시퀀스 연결(EnrollCourse.DB.java)
private MongoDatabase db = null;
private MongoCollection<Document> enrollCollection = null;
private MongoCollection<Document> seqEnrollCollection = null;
private static EnrollCourseDB enrollCourseDB = new EnrollCourseDB();
public EnrollCourseDB() {
MongoClient client = MongoClients.create(Setting.URL);
this.db = client.getDatabase(Setting.DBNAME);
this.enrollCollection = db.getCollection(Setting.ENROLL_COLLECTION);
this.seqEnrollCollection = db.getCollection(Setting.SEQ_ENROLL_COLLECTION);
}
public static EnrollCourseDB getInstance() {
return enrollCourseDB;
}
*수강 신청 등록(EnrollCourse.DB.java)
**수강 신청 등록할 때 학생, 과목의 정보가 들어가야 하므로 각각의 id를 같이 등록한다.
public int insertEnroll(Enrollcourse enrollcourse) throws Exception {
Bson query = Filters.eq("_id", "SEQ_ENROLL_NO");
Bson update = Updates.inc("seq", 1);
Document doc = seqEnrollCollection.findOneAndUpdate(query, update);
long encid = doc.getLong("seq");
Document document = new Document();
document.append("_id", encid);
document.append("room", enrollcourse.getEncroom());
document.append("date", enrollcourse.getEncdate());
document.append("student", enrollcourse.getStudent().getStdid());
document.append("course", enrollcourse.getCourse().getCorcode());
InsertOneResult result = enrollCollection.insertOne(document);
if (result.getInsertedId().asInt64().getValue() == encid) {
return 1;
}
return 0;
}
*학생, 과목의 정보 넘기기(StudentDB.java, Course.java)
// 학생 번호가 전달되면 학생 1명의 정보 리턴(enrollcourse에서 사용)
public Student selectStudentOne(Long no) throws Exception {
Bson queryBson = Filters.eq("_id", no);
MongoCursor<Document> cursor = this.studentCollection.find(queryBson).iterator();
if (cursor.hasNext()) {
Document doc = cursor.next();
return new Student(
doc.getLong("_id"),
doc.getString("name"),
doc.getString("major"),
doc.getDate("Date"),
null
);
}
return null;
}
// 과목 번호가 전달되면 학생 1명의 정보 리턴(enrollcourse에서 사용)
public Course selectCourseOne(Long no) throws Exception {
Bson queryBson = Filters.eq("_id", no);
MongoCursor<Document> cursor = this.courseCollection.find(queryBson).iterator();
if (cursor.hasNext()) {
Document doc = cursor.next();
//교수 번호를 이용해서 교수 정보 가져오기
Professor p = ProfessorDB.getInstance().selectProfessorOne(doc.getLong("professor"));
return new Course(
doc.getLong("_id"),
doc.getString("name"),
doc.getInteger("point"),
doc.getDate("date"),
p, //교수정보 포함
null
);
}
return null;
}
*등록하기(App.java)
**학생과 과목의 정보를 같이 등록하기 위해 기존에 등록한 id 값을 가져온다.
// 학생 한명, 과목 가져오기(학생, 과목 번호)
Student s1 = StudentDB.getInstance().selectStudentOne(4L);
Course c1 = CourseDB.getInstance().selectCourseOne(2L);
// 수강신청 내용 생성
Enrollcourse enrollcourse = new Enrollcourse();
enrollcourse.setEncno(null);
enrollcourse.setEncroom("강의실3");
enrollcourse.setEncdate(new Date());
enrollcourse.setStudent(s1); // 학생정보 조회
enrollcourse.setCourse(c1); // 과목정보 조회
// 과목 등록
int ret = EnrollCourseDB.getInstance().insertEnroll(enrollcourse);
// 결과 출력
System.out.println(ret);
*db 확인
*전체 목록 조회(EnrollCourse.DB.java)
public List<Enrollcourse> selectenroll() throws Exception {
MongoCursor<Document> cursor = this.enrollCollection.find().sort(Filters.eq("_id", 1)).cursor();
List<Enrollcourse> list = new ArrayList<>();
while (cursor.hasNext()) {
Document doc = cursor.next();
// 학생, 과목 번호를 이용해서 다른 db에서 정보를 받음
Student s = StudentDB.getInstance().selectStudentOne(doc.getLong("student"));
Course c = CourseDB.getInstance().selectCourseOne(doc.getLong("course"));
Enrollcourse enrollcourse = new Enrollcourse();
enrollcourse.setEncno(doc.getLong("_id"));
enrollcourse.setEncroom(doc.getString("room"));
enrollcourse.setEncdate(doc.getDate("date"));
enrollcourse.setStudent(s);
enrollcourse.setCourse(c);
list.add(enrollcourse);
}
return list;
}
*조회하기(App.java)
List<Enrollcourse> list = EnrollCourseDB.getInstance().selectenroll();
for (Enrollcourse enrollcourse : list) {
System.out.println(enrollcourse.getEncno());
System.out.println(enrollcourse.getEncroom());
System.out.println(enrollcourse.getEncdate());
System.out.println(enrollcourse.getStudent().getStdid());
System.out.println(enrollcourse.getCourse().getCorcode());
}
*출력값 확인
*학생별 수강 내역 조회(EnrollCourse.DB.java)
**교수의 정보는 이전에 과목 정보에 포함 했으므로 과목정보만 불러온다.
public List<Enrollcourse> selectEnrollStudent(long no) throws Exception {
//수강 컬렉션에서 student이 같은 것( _id, classroom, course, student, date)
Bson query = Filters.eq("student", no);
MongoCursor<Document> cursor = this.enrollCollection.find(query).sort(Filters.eq("_id", 1)).cursor();
List<Enrollcourse> list = new ArrayList<>();
while (cursor.hasNext()) {
// 수강번호, 강의실, 등록일자, 학번, 과목번호
Document doc = cursor.next();
long _id = doc.getLong("_id"); //수강신청번호
String classroom = doc.getString("room"); //강의실
long course =doc.getLong("course"); //과목번호
long student =doc.getLong("student"); //학번
Date date = doc.getDate("date"); //등록일자
//리턴하기 위해 객체 생성
Enrollcourse enrollcourse = new Enrollcourse();
// 0. 학생 번호를 이용해서 학생 정보를 가져오기
Student s = StudentDB.getInstance().selectStudentOne(student);
enrollcourse.setStudent(s);
// 1. 과목 번호를 이용해서 과목 정보를 가져오기(교수 정보도 포함됨)
Course c = CourseDB.getInstance().selectCourseOne(course);
enrollcourse.setCourse(c);
// 2. list 에 추가해서 반환
enrollcourse.setEncno(_id);
enrollcourse.setEncroom(classroom);
enrollcourse.setEncdate(date);
list.add(enrollcourse);
}
return list;
}
*조회하기(App.java)
**교수의 정보는 과목 정보에 포함되어 있으므로 과목의 정보를 불러오고 그 안에서 필요한 교수의 정보를 가져온다.
List<Enrollcourse> list = EnrollCourseDB.getInstance().selectEnrollStudent(4L);
for (Enrollcourse enrollcourse : list) {
System.out.println(enrollcourse.getEncno());
System.out.println(enrollcourse.getEncroom());
System.out.println(enrollcourse.getStudent().getStdname());
System.out.println(enrollcourse.getCourse().getCorname());
System.out.println(enrollcourse.getCourse().getCorpoint());
System.out.println(enrollcourse.getCourse().getProfessor().getPrfname());
}
*출력값 확인
스프링
spring 검색 - 4 번째 파일 설치 후 재시작
view 스프링 검색 - maven 2.5.4 - java - 이름 - jar -11 -dev tools, lombok, web
d 드라이브 boot 폴더 생성
이클립스(스프링)
헬프 - 마켓플레이스 -sys 검색 - 4.11.1 설치