JAva 2022/02/24(継承者)
12221 ワード
ファイル名/basic/parent.java , Parent1.java Parent.java Parent1.java
Parentによって取得された要約クラス部分 Parent 1インタフェース部 BoardDBImpl.Javaで使用する変数 を設定します. App.Javaの設計に必要な方法
BoardDBImpl.Javaでoverrideは を使用 BoardDB.Java設計の使用方法
Overrideの使用 は本当の職場ですプログラムの起動Bordb.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();
}
package com.example.basic;
// interface === abstract class
public interface Parent1 {
public void printA();
public void printB();
// 클래스에서 정의
// public abstract void printNum1();
}
ファイル名/basic/child 1.javapackage 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");
}
@Override
public void printA() {
}
@Override
public void printB() {
}
}
ファイル名/vo/Board.javapackage 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.javaBoardDBImpl.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.javaOverrideの使用
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;
}
}
}
ファイル名アプリケーション.javapackage 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());
}
}
}
Reference
この問題について(JAva 2022/02/24(継承者)), 我々は、より多くの情報をここで見つけました https://velog.io/@anrkfl/java-20220224-상속자Overrideテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol