요약정리
지금 만드는 것들 원래는 할 필요가 없음.
프레임 워크 쓰면 자동으로 됨 서비스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
'java' 카테고리의 다른 글
국비 코딩 풀스택 수업 40일차 제너릭 클래스, 추상화, cursor, iterator, first, Map, Filters.and, Updates.combine (0) | 2022.08.19 |
---|---|
39일차 오후 개인 공부(따로 보충) (0) | 2022.08.19 |
국비 코딩 풀스택 수업 38일차 lombok, static, 서버관리 폴더따로, entity, ArrayList (1) | 2022.08.18 |
국비 코딩 풀스택 수업 37일차 라이브러리 추가, 몽고디비 연결, 제너릭 클래스 (0) | 2022.08.16 |
국비 코딩 풀스택 수업 36일차 자바 첫날 셋팅 + 알고리즘 문제 (0) | 2022.08.12 |