java

국비 코딩 풀스택 수업 39일차 틀린거 많은 날, app제외 실행, 형변환, List사용법 및 개념, entity의 이동(mvc)

비루블 2022. 8. 18. 12:52

요약정리

지금 만드는 것들 원래는 할 필요가 없음.
프레임 워크 쓰면 자동으로 됨 서비스impl 제외.

 

오전

오늘 좀 중요 서비스에서 짠 것들을 어떻게 app에서 돌리는지

오늘 것만 봐도 싹 이해할 수 있음.

 

어제 만든 App.java 거의 다 틀림.
반성 ㄱㄱ

 

형변환(long 타입으로)<대문자타입이름.함수>
obj.setNo(Long.valueOf(arr[0]));

 

 

list 어미 아들
설계할때는 어미를 쓰고 추상적으로 설정

예시

public List<Student> selectListStudent( int page );

 

collection1을 만들어서 수강신청 목록까지 끌고 와봄

 

selectListStudent
에러나서 애를 먹었음.
데이터 불러올때 반복문에서 한번만 불러오고
getLong("_id")부터 계속 오류남.
알고보니까 데이터베이스에 첫번째 만든 데이터에서 문제가 있던 것임.

 

mvc패턴
m이 서비스
v에 학번, 이름, 연락처
v->c->m->db
entity가 위에처럼 왔다갔다 하는거임(mvc 패턴을 왔다리갔다리 한다는 말)
다른 서비스or v,c에서 entity를 받아서 getter/setter로 씀.

 

c는 전송해주는 통로역할만
움직이는건 entity
서비스는 인터페이스

 

 

@Getter // 꺼낼때 사용
@Setter // 추가할때 사용
@ToString // 담겨있는 데이터가 어떤겁니까 // 현재의 데이터는 어떤건가요?

 

서비스에서 "사용하는 곳에서 오류 처리를 하겠다."라고 하면

    // 교수등록
    // 오류처리를 사용하는 곳에서 처리함. => throws Exception;
    public int insertProfessor( Professor p ) throws Exception;

위와 같이 throws Exception;을 붙임.(service)

 

 

오전일과
StudentServiceImpl + StudenView
app에서 실행말고
따로 실행 파일 만듬
example> view
app에서 간단한 코드만 기입하고
view에서 구체적 코드 짜니까
app이 깔끔해짐

 

StudenView.java 중요중요중요중요중요중요중요중요중요중요

package com.view;

import java.util.List;
import java.util.Scanner;

import com.example.entity.Student;
import com.example.service.StudentService;
import com.example.service.StudentServiceImpl;

public class StudentView {

    public StudentView() {
        StudentService studentService = new StudentServiceImpl();

        Scanner scanner = new Scanner(System.in);

        while(true){ // 무한반복
            System.out.println("1. 학생등록");
            System.out.println("2. 학생전체조회");
            System.out.println("3. 학생1명조회");
            System.out.println("4. 학생수정");
            System.out.println("5. 학생삭제");
            System.out.println("6. 종료");
            System.out.print("메뉴를 선택하세요 ? ");

            int menu = scanner.nextInt();
            if(menu == 6){
                break;
            }
            else if(menu == 1){
                // 1,가나다,010-0000-0000
                System.out.println("추가할 학생 정보 입력 ex)1,가나다,010-0000-0000");
                String str = scanner.next();
                String[] arr = str.split(",");


                Student obj = new Student();
                obj.setName(arr[1]);
                obj.setPhone(arr[2]);
                obj.setNo(Long.valueOf(arr[0]));

                int ret = studentService.insertStudent(obj);
                if(ret == 1){
                    System.out.println("학생등록성공");
                }
                else {
                    System.out.println("학생등록실패");
                }
            }
            else if(menu == 2){
                List<Student> list = studentService.selectListStudent(1);
                for(Student obj : list ){
                    System.out.println(obj.toString());
                }

            }
            else if(menu == 3){
                System.out.println("학생번호를 적어주세요");
                Long keyno = scanner.nextLong();
                StudentService obj = new StudentServiceImpl();
                Student student = new Student();
                student.setNo(keyno);
                System.out.println(obj.selectOneStudent(student));
            }
            else if(menu == 4){
                // 14,222222,012-0000-0000
                System.out.println("수정할 학생 정보 입력 ex)1,가나다,010-0000-0000");
                String str = scanner.next();
                String[] arr = str.split(",");


                Student obj = new Student();
                obj.setName(arr[1]);
                obj.setPhone(arr[2]);
                obj.setNo(Long.valueOf(arr[0]));

                int ret = studentService.updateStudent(obj);
                if(ret == 1){
                    System.out.println("학생수정성공");
                }
                else {
                    System.out.println("학생수정실패");
                }

            }
            else if(menu == 5){
                System.out.print("삭제할 번호 입력 : ");
                Long no = scanner.nextLong();
                Student obj = new Student();
                obj.setNo(no);

                int ret = studentService.deleteStudent(obj);
                if(ret == 1){
                    System.out.println("학생삭제성공");
                }
                else {
                    System.out.println("학생삭제실패");
                }
            }
        }

        scanner.close();
    }
    
}



insert에
형변환
obj.setNo(Long.valueOf(arr[0]));

else if(menu == 1){
    // 1,가나다,010-0000-0000
    System.out.println("추가할 학생 정보 입력 ex)1,가나다,010-0000-0000");
    String str = scanner.next();
    String[] arr = str.split(",");


    Student obj = new Student();
    obj.setName(arr[1]);
    obj.setPhone(arr[2]);
    obj.setNo(Long.valueOf(arr[0]));

    int ret = studentService.insertStudent(obj);
    if(ret == 1){
        System.out.println("학생등록성공");
    }
    else {
        System.out.println("학생등록실패");
    }
}



Integer. 컨트롤 + 스페이스로 형변환들 종류 봣음



selectOneStudent중요중요중요중요중요 반복문으로 enrollcourse
수강 추가

private MongoCollection<Document> collection1 = null; // 수강

this.collection1 = MongoConfig.create().getConnection("enrollcourses"); // 수강

 

교재 391쪽
List 개념

public void test() {
    List<String> list = new ArrayList<>(); // str타입 배열
    List<Integer> list1 = new ArrayList<>(); // int타입 배열

    List<Student> list2 = new ArrayList<>(); // student타입 배열

    // get => 정보가져오기
    // set => 정보추가
    // is  => 참거짓


    // 학생타입 배열 만들기
    Student s = new Student();
    list2.add(s);
    list2.add(s);
    list2.add(s);

    for(Student str : list2){

    }



    // str타입 배열 만들기
    list.add("aaaa");
    list.add("bbbb");
    list.add("cccc");
    list.add("dddd");

    for(String str : list){ // 번호 미포함

    }

    for(int i = 0; i<list.size(); i++){ // 번호 포함
        list.get(i);
    }
}

 

list 개념 설명
어미 아들
설계할때는 어미를 쓰고 추상적으로 설정

학생타입 넣을때 
List<Student> list2 = new ArrayList<>();
여기서 타입은 <여기있는게 타입>

Student라는 타입을 넣은 것임.

 


selectListStudent

에러나서 애를 먹었음.
데이터 불러올때 반복문에서 한번만 불러오고
getLong("_id")부터 계속 오류남.
알고보니까 데이터베이스에 첫번째 만든 데이터에서 문제가 있던 것임.

몽고디비에서 삭제 해주니까 됬음.

원래는 할 필요가 없음.
프레임 워크 쓰면 다 나옴

 

StudentService.java

package com.example.service;

import java.util.List;

import com.example.entity.Student;

public interface StudentService {
    

    // 학생등록
    public int insertStudent( Student Student );

    // 학생수정
    public int updateStudent( Student Student );

    // 학생삭제
    public int deleteStudent( Student Student );

    // 학생조회
    public Student selectOneStudent( Student Student );

    // 학생전체조회
    public List<Student> selectListStudent( int page );

    // 전체 학생 수 조회
    public Long countStudent();

}

 


StudentServiceImpl.java

package com.example.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.print.Doc;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.example.config.MongoConfig;
import com.example.entity.EnrollCourse;
import com.example.entity.Student;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.InsertOneResult;
import com.mongodb.client.result.UpdateResult;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class StudentServiceImpl implements StudentService{

    private MongoCollection<Document> collection = null; // 학생
    private MongoCollection<Document> collection1 = null; // 수강
    
    public StudentServiceImpl() {
        this.collection = MongoConfig.create().getConnection("students"); // 학생
        this.collection1 = MongoConfig.create().getConnection("enrollcourses"); // 수강
    }


    @Override
    public int insertStudent(Student Student) {
        try{
            Document arg0 = new Document();
            arg0.append("_id", Student.getNo());
            arg0.append("name", Student.getName());
            arg0.append("phone", Student.getPhone());
            arg0.append("regdate", new Date()); // java.util.Data
    
            InsertOneResult result = this.collection.insertOne(arg0);
            System.out.println(result);
            System.out.println();
            if(result.getInsertedId().asInt64().getValue() == Student.getNo()){
                System.out.println(result.getInsertedId().asInt64().getValue());
                return 1;
            }
            
            return 1;
        }
        catch(Exception e){
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int updateStudent(Student Student) {
        try{
            // 수정할 조건 정보
            Bson arg0 = Filters.eq("_id", Student.getNo());

            // 수정할 항목들
            Bson arg1 = Updates.set("name", Student.getName());
            Bson arg2 = Updates.set("phone", Student.getPhone());

            Bson arg3 = Updates.combine(arg1, arg2);

            UpdateResult result = this.collection.updateOne(arg0, arg3);
            System.out.println(result);
            if(result.getModifiedCount() == 1L){
                return 1;
            }
            return 0;
        }
        catch(Exception e){
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public int deleteStudent(Student Student) {
        try{
            Bson query = Filters.eq("_id", Student.getNo()); // 2
            DeleteResult result = this.collection.deleteOne(query); // 1
            System.out.println(result);
            if(result.getDeletedCount() == 1L){
                return 1;
            }
            return 0;
        }
        catch(Exception e){
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public Student selectOneStudent(Student Student) {
        try{
            Bson arg0 = Filters.eq("_id", Student.getNo());

            FindIterable<Document> list = this.collection.find(arg0).limit(1);
    
            // 확인용
            // 반복문 돌리는 이유 : 추가 될때마다 list2에 넣어줘야해서
            for(Document doc : list) {
                Student retStudent = new Student();
                retStudent.setNo( doc.getLong("_id"));
                retStudent.setName( doc.getString("name"));
                retStudent.setPhone( doc.getString("phone"));
                retStudent.setRegdate( doc.getDate("regdate"));
    
                Bson query1 = Filters.eq("studentno", Student.getNo());
                FindIterable<Document> list1 = collection1.find(query1);
    
                // 배열 ArrayList
                List<EnrollCourse> list2 = new ArrayList<>();
                for(Document doc1 : list1){ // 수강한 개수만큼 반복
                    EnrollCourse enr = new EnrollCourse();
                    enr.setId(doc1.getLong("_id"));
                    enr.setRegdate(doc1.getDate("regdate"));
                    
                    list2.add(enr);
                }
                retStudent.setEnrollCourse(list2);
    
                return retStudent;
            }
            return null;
            
        }
        catch(Exception e){
            e.getStackTrace();
            return null;
        }
    }

    @Override
    public List<Student> selectListStudent(int page) {
        try{
            FindIterable<Document> list = collection.find().skip( (page-1)*10 ).limit(10);
            
            List<Student> list2 = new ArrayList<>();
            for(Document doc : list) {
                System.out.println(doc.toJson());


                Student student = new Student();
                // System.out.println("되나1");
                // System.out.println(doc.getLong("_id"));
                student.setNo( doc.getLong("_id") );
                // System.out.println("되나2");
                student.setName( doc.getString("name") );
                student.setPhone( doc.getString("phone") );
                student.setRegdate( doc.getDate("regdate") );
                // System.out.println("되나99");
                list2.add(student);
            }
            return list2;
        }
        catch(Exception e){
            return null;
        }
    }    

    @Override
    public Long countStudent() {
        try{
            return null;
        }
        catch(Exception e){
            e.getStackTrace();
            return null;
        }
    }  
}

 


오후일과

법원 문제로 조퇴

Professor 관련 코드 짤 예정 

ProfessorService.java
// 오류처리를 사용하는 곳에서 처리함.

ProfessorServiceImpl.java