Application.java에서 실행
클래스명 변수명 = new 생성자명
➡️ItemView obj = new ItemView();
변수 미사용시new ItemView();
형태로 간략하게 사용가능
import com.example.view.ItemView;
public class App
{
public static void main( String[] args )
{
new ItemView();
}
}
- MongoConfig.java에서 MongoConfig class 생성
- MongoConfig class에
MongoCollection<Document> getConnection
메서드 생성
➡️ String Collectionname 을 넣어주면 return값으로 DB에서 Collectionname과 일치하는 해당 컬렉션이 반환된다 =db.getCollection(collectionName);
- DB연동시 객체 여러개 생성하는 방식으로 생성하면 안된다
@autowired
=싱글턴 패턴
= 객체를 1개만 생성하게 하는 클래스 = 더 이상 객체 생성 불가- DB접속시
싱글턴 패턴
을 사용하는 경우 DB접속을 빠르고 원활하게 해준다
➡️ DB접속시싱글턴 패턴
을 사용하지 않는 경우 과부하가 걸리기 때문에 모든 DB연동은싱글턴 패턴
을 사용한다- 🌎 참고 수식자(public, static, ...)와 접근제어자(public, private, ...) 개념
import org.bson.Document;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MongoConfig {
// static 외부에서 생성자 생성 불가
// private 사용하면 외부에서 만들 수 없음
private static MongoConfig obj = new MongoConfig();
// 기본 생성자
private MongoConfig() {
}
// 외부에서 객체 생성시 static의 create 호출해야 함
public static MongoConfig create() {
return obj;
}
// 3. 메소드
public MongoCollection<Document> getConnection(String collectionName ) {
try{
String url = "mongodb://id207:pw207@1.234.5.158:37017/db207";
MongoClient client = MongoClients.create(url);
if(client != null) {
MongoDatabase db = client.getDatabase("db207");
return db.getCollection(collectionName);
}
return null;
}
catch(Exception e){
return null;
}
}
}
entity
생성
```
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Item {
// 기본키 설정 불가!
private Long no = 0L;
private String name = "";
private Long price = 0L;
private Date regdate = null;
}
```
interface
생성
mongorepository
에서는 기본적으로 사용가능한 CRUD가 있어서 interface 구현 없이 상속받아 사용했었다 지금은mongorepository
사용하지 않으니 직접 설계 해야한다interface
➡️ 설계만 가능! 구현은 불가- 등록, 수정, 삭제, 1개 조회, 여러개 조회 ➡️ 파라미터에 따라 필요한 반환값 생성해주면 된다
package com.example.service;
import java.util.List;
import com.example.entity.Item;
// interface => 설계만! 구현 불가
public interface ItemService {
// 등록, 수정, 삭제, 1개 조회, 여러개 조회
// 파라미터에 따라 필요한 반환값 받아내기
// Item이 오면 int 반환
public int insertItem( Item item );
public int updateItem( Item item );
public int deleteItem( Item item );
// Long이 오면 Item 반환
public Item selectItemOne( Long no );
// int가 오면 List<Item> 반환
public List<Item> selectItemList( int page );
}
service
생성
mongoconfig
이용하여 DB 접속public ItemServiceImpl()
사용하여java_exam
컬렉션 받아오기
➡️ collection = mongodb.getConnection("java_exam");- ItemServiceimpl.java 에서
implements
ItemService
🌎 참고 extends, implements의 차이점- ItemService의 구현되지 않은 메서드 추가 ➡️ 클릭하면 @Override 생성된다(오류처리도 해주기!)
- 물품등록, 수정, 삭제, 1개조회, 전체조회
service
생성- 물품 1개조회시
cursor()
+hasnext()
사용 ➡️ cursor.hasNext() 메서드는 커서에 반환할 문서가 더 있는 경우 true를 반환
🌎 참고 cursor.hasNext() 관련 링크
// interface 사용하여 구현
public class ItemServiceImpl implements ItemService {
private MongoConfig mongodb = MongoConfig.create();
private MongoCollection<Document> collection = null;
// mongoconfig이용해서 DB 접속
public ItemServiceImpl() {
// 컬렉션 받아오기
collection = mongodb.getConnection("java_exam");
}
// 물품 등록
@Override
public int insertItem(Item item) {
try {
Document doc = new Document();
doc.append("_id", item.getNo());
doc.append("name", item.getName());
doc.append("price", item.getPrice());
doc.append("regdate", new Date());
InsertOneResult result = collection.insertOne(doc);
System.out.println(result);
if (result.getInsertedId().asInt64().getValue() == item.getNo()) {
return 1;
}
return 0;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
// 물품 수정
@Override
public int updateItem(Item item) {
try {
// 조건 : 입력한 아이템 번호와 DB의 _id일치
Bson query = Filters.eq("_id", item.getNo());
// name과 price변경가능
Bson set1 = Updates.set("name", item.getName());
Bson set2 = Updates.set("price", item.getPrice());
Bson set3 = Updates.combine(set1, set2);
// 컬렉션.업데이트(조건, 변경항목)
UpdateResult result = collection.updateOne(query, set3);
System.out.println("result = " + result);
if (result.getModifiedCount() == 1L) {
return 1;
}
} catch (Exception e) {
e.printStackTrace();
return -1;
}
return 0;
}
// 물품 삭제
@Override
public int deleteItem(Item item) {
try {
// 입력한 번호와 DB _id 일치시 삭제
Bson query = Filters.eq("_id", item.getNo());
DeleteResult result = collection.deleteOne(query);
System.out.println("result = " + result);
if(result.getDeletedCount() == 1L){
return 1;
}
} catch (Exception e) {
e.printStackTrace();
return -1;
}
return 0;
}
// 물품 1개조회
@Override
public Item selectItemOne(Long no) {
try {
// 입력한 물품번호와 일치하는 데이터를 DB에서 조회
Bson query = Filters.eq("_id", no);
MongoCursor<Document> list = collection.find(query).limit(1).cursor();
// 1개 정보니까 반복문 없이 if사용
if( list.hasNext() ){
Document doc = list.next(); //1개씩 가져오기
Item obj = new Item();
obj.setNo(doc.getLong("_id"));
obj.setName( doc.getString("name") );
obj.setPrice( doc.getLong("price") );
obj.setRegdate( doc.getDate("regdate") );
// System.out.println("obj => " + obj);
return obj;
}
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// 물품 전체조회
@Override
public List<Item> selectItemList( int page ) {
try {
FindIterable<Document> list = collection.find().skip( (page-1)*10 ).limit(10);
List<Item> list2 = new ArrayList<>();
for(Document doc : list){
Item obj = new Item();
obj.setNo( doc.getLong("_id") );
obj.setName( doc.getString("name") );
obj.setPrice( doc.getLong("price") );
obj.setRegdate( doc.getDate("regdate") );
list2.add(obj);
}
return list2;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
선택 menu별 코드 작성
package com.example.view;
import java.util.List;
import java.util.Scanner;
import com.example.entity.Item;
import com.example.service.ItemService;
import com.example.service.ItemServiceImpl;
public class ItemView {
public ItemView() {
ItemService iService = new ItemServiceImpl();
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("0.종료");
System.out.println("메뉴를 입력하세요");
int menu = scanner.nextInt();
if(menu == 0){
break;
}
else if( menu == 1){
// 물품등록
System.out.println("등록할 물품번호, 이름, 가격 입력 => ");
String[] arr = scanner.next().split(",");
Item item = new Item();
item.setNo( Long.valueOf(arr[0]) );
item.setName(arr[1]);
item.setPrice(Long.valueOf(arr[2]));
int ret = iService.insertItem(item);
if(ret == 1){
System.out.println("물품등록 성공");
}
else{
System.out.println("물품등록 실패");
}
}
else if( menu == 2){
// 물품전체조회
System.out.println("전체 물품 목록");
List<Item> list = iService.selectItemList(1);
for( Item obj : list){
System.out.println(obj.toString());
}
}
else if( menu == 3){
// 물품1개조회
System.out.println("조회할 물품 번호 입력 => ");
Long no = scanner.nextLong();
// 입력한 번호로 물품 조회
Item item = new Item();
item.setNo(no);
Item result = iService.selectItemOne(no);
System.out.println(result);
}
else if( menu == 4){
// 물품삭제
System.out.println("삭제할 물품 번호 입력 => ");
Item item = new Item();
item.setNo(scanner.nextLong());
int ret = iService.deleteItem(item);
if(ret == 1){
System.out.println("물품삭제 성공");
}
else{
System.out.println("물품삭제 실패");
}
}
else if( menu == 5){
// 물품수정
System.out.println("수정할 아이템 번호, 수정할이름, 수정할가격 입력 => ");
String arr[] = scanner.next().split(",");
Item item = new Item();
item.setNo( Long.valueOf(arr[0]) );
item.setName( arr[1] );
item.setPrice( Long.valueOf(arr[2]) );
int ret = iService.updateItem(item);
if(ret == 1){
System.out.println("물품수정 성공");
}
else{
System.out.println("물품수정 실패");
}
}
}
scanner.close();
}
}