MemberDBImpl.java service

팡태(❁´◡`❁)·2022년 3월 7일
0

java

목록 보기
20/36
package com.example.service;

import java.util.List;

import com.example.entity.Member;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

// DB연동을 실제로 수행하는 구현부
// 프레임워크에 따라 
@Service
public class MemberDBImpl implements MemberDB {

    // 환경설정으로 생성된 객체를 가져옴
    @Autowired
    private MongoTemplate mongodb;

    @Override
    public Member insertMember(Member member) {
        try {
            return mongodb.insert(member);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<Member> selectListMember() {
        try {
            Query query = new Query();
            return mongodb.find(query, Member.class);
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public int deleteMember(String id) {
        try {
            Member member = new Member();
            member.setId(id);
            DeleteResult result = mongodb.remove(member);
            if (result.getDeletedCount() == 1L) {
                return 1;
            }
            return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public Member selectOneMember(String id) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("_id").is(id);
            query.addCriteria(criteria);
            return mongodb.findOne(query, Member.class);
        } catch (Exception e) {
            e.printStackTrace(); // 개발자를 위한 출력(debug용)
            return null;
        }
    }

    @Override
    public int updateMember(Member member) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("_id").is(member.getId());
            query.addCriteria(criteria);

            Update update = new Update();
            update.set("name", member.getName());
            update.set("age", member.getAge());

            UpdateResult result = mongodb.updateFirst(query, update, Member.class);
            if (result.getModifiedCount() == 1L) {
                return 1;
            }
            return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    @Override
    public Member selectLogin(Member member) {
        try {
            Query query = new Query();

            query.addCriteria(Criteria.where("_id").is(member.getId()));
            query.addCriteria(Criteria.where("pw").is(member.getPw()));

            return mongodb.findOne(query, Member.class);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public long updateMemberPassword(Member member) {
        try {
            Query query = new Query();
            query.addCriteria(Criteria.where("_id").is(member.getId()));
            query.addCriteria(Criteria.where("pw").is(member.getPw()));

            Update update = new Update();
            update.set("pw", member.getNewPw());

            UpdateResult result = mongodb.updateFirst(query, update, Member.class);
            return result.getModifiedCount();
        } catch (Exception e) {
            e.printStackTrace();
            return -1L;
        }
    }

    @Override
    public List<Member> selectListPageSearchMember(int page, String text) {
        try {
            Query query = new Query();

            // 검색 패턴( .*a.* => a가 포함된 것 검색)
            Criteria criteria = Criteria.where("name").regex(".*" + text + ".*");
            query.addCriteria(criteria);

            // 페이지네이션
            Pageable pageable = PageRequest.of(page - 1, 10);
            query.with(pageable);

            // 정렬
            Sort sort = Sort.by(Direction.DESC, "_id");
            query.with(sort);

            return mongodb.find(query, Member.class);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    @Override
    public long CountSearchMember(String text) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("name").regex(".*" + text + ".*");
            query.addCriteria(criteria);

            return mongodb.count(query, Member.class);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

}

0개의 댓글