JAva 2022/02/24(継承者)

12221 ワード

ファイル名/basic/parent.java , Parent1.java
  • Parent.java
  • package com.example.basic;
    
    import lombok.Getter;
    import lombok.Setter;
    
    @Getter
    @Setter
    public abstract class Parent {
        
        // 클래스의 공통변수
        private int num = 0;
    
        // 클래스명과 일치 생선자, 여러개 가능 (오브로딩)
        public Parent(){
    
        }
    
        // 생성자 //// 생성자를 수동으로 생성할경우 꼭 빈 생성자를 만들어 주어야 함
        public Parent(int num) {
            this.num = num;
        }
    
        // getter/ setter
    
        // 메소드
        public void printNum(){
            System.out.println(this.num);
        }
    
        // 메소드는 기능구현X, 자식은 반드시 기능을 구현해야함.
        // 설계용.  abstract << 기능구현을 하지 않을때 사용. 위쪽에 클래스에도 abstract을 넣어주어야함
        public abstract void printNum1();    
    }
  • Parent1.java
  • package com.example.basic;
    
    // interface === abstract class
    public interface Parent1 {
            
        public void printA();
        public void printB();
    
        // 클래스에서 정의
        // public abstract void printNum1();    
    }
    ファイル名/basic/child 1.java
  • Parentによって取得された要約クラス部分
  • package com.example.basic;
    
    // Parent는 라이브러리이고 Child1을 만드는데 기존의 기능 + 새로운 기능추가(활용)
    public class Child1 extends Parent implements Parent1 {  // extends <= 사용할때   Parent <= 이 파일을 
                                    // implements  interface를 추가로 사용할때  Parent1 <= 이 파일을 (n개 사용가능)   
    
        public Child1() {
            super();
            // 이런 생성자 호출 => public Parent()
        }
    
        public Child1(int num) {
            // super 부모의 생성자를 호출
            super(num);
            // 이런 생성자 호출 => public Parent(int num)
        }
    
        @Override // 부모의 기능을 재구현(부모의 구현부 + 자식의 구현부)
        public void printNum() {        
            super.printNum();
            // 부모의 메소드가 호출
            System.out.println("Child1에서 출력");
        }  
    
        // 부모와 전혀 상관 없는 메소드
        public void printChild1(){
            System.out.println("PrintChild1");
        }
    
        @Override
        public void printNum1() {
            // TODO Auto-generated method stub
            System.out.println("printChild-printNum1");        
        }
  • Parent 1インタフェース部
  •     @Override
        public void printA() {
            
        }
    
        @Override
        public void printB() {
                    
        }    
    }
    ファイル名/vo/Board.java
  • BoardDBImpl.Javaで使用する変数
  • を設定します.
    package com.example.vo;
    
    import lombok.AllArgsConstructor;
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    import lombok.ToString;
    
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    
    // 파일명 : Board.java
    public class Board {
        // 1. 변수설정 (ERD 다이어그램에서 참고해서)
        // 글번호, 제목, 내용, 작성자, 조회수,
        private long no = 0L;
        private String title = null;
        private String content = null;
        private String writer = null;
        private int hit = 0;
    }
    ファイル名/db/BoarddB.java
  • App.Javaの設計に必要な方法
    BoardDBImpl.Javaでoverrideは
  • を使用
    package com.example.db;
    
    import java.util.List;
    
    import com.example.vo.Board;
    
    // 설계
    public interface BoardDB {    
        // 게시판 글쓰기
        public int insertBoard( Board board );
        // 게시판 삭제
        public int deleteBoard( Board board );
        // 게시판 수정
        public int updateBoard( Board board );
        // 게시판 1개 조회
        public Board selectOneBoard( Board board );
        // 게시팜 목록(ArrayList <- List)
        public List<Board> selectListBoard(  );
    }
    
    ファイル名/db/BoardDrimpl.java
  • BoardDB.Java設計の使用方法
    Overrideの使用
  • は本当の職場です
    package com.example.db;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.example.vo.Board;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoClient;
    import com.mongodb.client.MongoClients;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.model.Filters;
    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 org.bson.Document;
    import org.bson.conversions.Bson;
    
    public class BoardDBImpl implements BoardDB {    
        private final String url = "mongodb://id219:[email protected]:37017/db219";
    
        private MongoCollection<Document> collection = null;
    
        // 생성자에서 외부에서 객체를 생성하는 시점에 db연결하고 컬렉션도 선택
        public BoardDBImpl() {
            // 1. 접속하기 static로 되어있음. 접속은 객체를 n개 생성 불가
            MongoClient client = MongoClients.create(this.url);
            // 2. db연결
            MongoDatabase db = client.getDatabase("db219");
            // 3. 컬렉션 선택 (member2) 
            this.collection = db.getCollection("board2");
        }
    
    
        // 게시판 글 추가
        @Override
        public int insertBoard(Board board) {
            try{
                // 2. Document 생성            
                Document doc = new Document();
                doc.append("_id", board.getNo());
                doc.append("title", board.getTitle());
                doc.append("content", board.getContent());
                doc.append("writer", board.getWriter());
                doc.append("hit", board.getHit());
                
                //1. 컬렉션에 데이터를 추가하기(Document가 필요)
                // result에 추가했던 _id의 값이 리턴됨
                InsertOneResult result = this.collection.insertOne(doc);
                
                // String aa="aa"; => if(aa.equaps("aa")){}
                // long aa = 1L;   => if(aa == 2)()
    
                if(result.getInsertedId().asInt64().getValue() == board.getNo() ){
                    return 1; // 성공
                }
                return 0;    // 실패
            }
            catch(Exception e){
                e.printStackTrace(); //오류출력
                return -1;
            }        
        }
    
        // 게시판 글 삭제
        @Override
        public int deleteBoard(Board board) {
            try{
                // 2. bson
                Bson bson = Filters.eq("_id", board.getNo());
    
                // 1. 삭제 (Bson)
                DeleteResult result = this.collection.deleteOne(bson);
                if(result.getDeletedCount() == 1L){
                    return 1;
                }
                return 0;
            }
            catch(Exception e){
                e.printStackTrace(); //오류출력
                return 0;
            }        
        }
    
        // 게시판 글 수정
        @Override
        public int updateBoard(Board board) {
            try{
                //Bson(조건)
                Bson bson = Filters.eq("_id", board.getNo());
    
                // Bson(변경값)
                Bson bson1 = Updates.set("title", board.getTitle());
                Bson bson2 = Updates.set("content", board.getContent());
                Bson bson3 = Updates.set("writer", board.getWriter());
    
                // Bson을 합침
                Bson bson4 = Updates.combine(bson1,bson2,bson3);
    
                // Bson(조건), Bson(변경값)
                UpdateResult result = this.collection.updateOne(bson, bson4);
                if(result.getModifiedCount() == 1L){
                    return 1;
                }
              
                return 0;
            }
            catch(Exception e){
                e.printStackTrace(); //오류출력
                return 0;
            }        
        }
    
        // 게시판 글 1개 조회
        @Override
        public Board selectOneBoard(Board board) {
            try{
                Bson bson = Filters.eq("_id", board.getNo());
    
                // List<String> <= "aaa", "bbb", "ccc"
                FindIterable<Document> rows = this.collection.find(bson);
                for(Document tmp : rows){
                    return new Board(
                        tmp.getLong("_id"),
                        tmp.getString("title"),
                        tmp.getString("content"),
                        tmp.getString("writer"),
                        tmp.getInteger("hit")               
                    );                
                }
                return null;          
            }
            catch(Exception e){
                e.printStackTrace(); //오류출력
                return null;
            }        
        }
    
        // 게시판 글 전체 조회
        @Override
        public List<Board> selectListBoard() {
            try{            
                FindIterable<Document> rows = this.collection.find().sort(Filters.eq("_id", 1) );
    
                // Board를 n개 보관할 수 있는 list변수 ArrayList(가변길이 배열) [{},{},{}...]
                // list ===> null
                List<Board> list = new ArrayList<Board>();            
    
                // board에 내용을 rows수 만큼 넣음
                for(Document tmp : rows){
                    // 여러개를 보관할때는 객체를 여기에 만듬(for문 안쪽)
                    Board board = new Board(                
                        tmp.getLong("_id"),
                        tmp.getString("title"),
                        tmp.getString("content"),
                        tmp.getString("writer"),
                        tmp.getInteger("hit")
                    );
                    list.add(board); // board를 list에 넣음
                }
                return list;          
            }
            catch(Exception e){
                e.printStackTrace(); //오류출력
                return null;
            }        
        }   
    }
    
    ファイル名アプリケーション.java
  • プログラムの起動Bordb.Javaとの併用
  • package com.example;
    
    import java.util.List;
    
    import com.example.db.BoardDB;
    import com.example.db.BoardDBImpl;
    import com.example.vo.Board;
    
    // 프로그램 시작 위치
    public class App {
        public static void main(String[] args) {        
                    
            // 0. 객체 생성, 클래스명 객체명 = new 생성자();
            BoardDB obj = new BoardDBImpl();
    
            // // 1. 게시판 글쓰기 수행
            // Board board = new Board(4L, "제목", "내용1", "작성자1", 100);        
            // int ret = obj.insertBoard(board);
            // System.out.println(ret);
            
            // // 2. 게시판 글 삭제        
            // Board board = new Board();
            // board.setNo(4);
            // int ret = obj.deleteBoard(board);
            // System.out.println(ret);
    
            // // 3. 게시판 글 수정
            // Board board = new Board(2L, "제목1", "내용1", "작성자1", 0);        
            // int ret = obj.updateBoard(board);
            // System.out.println(ret);
    
            // // 4. 게시판 글 1개 조회
            // Board board = new Board();
            // board.setNo(2);
            // Board board1 = obj.selectOneBoard(board);
            // System.out.println(board1.toString());
                   
            // 5. 게시판 글 전체 조회
            List<Board> list = obj.selectListBoard();
            for( Board tmp : list ){
                System.out.println(tmp.toString());
            }       
        }
    }