mongodb spring 연결

brave_chicken·2024년 6월 10일

잇(IT)생 챌린지

목록 보기
68/90

인텔리제이 기본셋팅 변경부분 생략(인텔리제이 게시물에 있음)

프로젝트 기본

프로젝트 구성

application.properties

ScoreController

@Controller
@RequestMapping("/score")
@RequiredArgsConstructor
public class ScoreController {
    private final ScoreMongoService service;

    @GetMapping("/list")
    public String mongolist(Model model){
        List<ScoreDTO> list = service.findAll();
        model.addAttribute("mongolist",list);
        return  "mongo/list";
    }

    //insert
    @GetMapping("/insert")
    public String insertPage(){
        return "mongo/mongo_insert";
    }
    @PostMapping("/insert")
    public String insert(ScoreDTO document){
        System.out.println("컨트롤러:"+document);
        service.insertDocument(document);
        return "redirect:/score/list";
    }
    @GetMapping("/multi/insert")
    //동일한 형식의 입력데이터가 여러 개인 경우 파라미터를 동일한 이름으로 정의하고 형식에 맞게 DTO를 만들면 자동으로 List에 DTO가 담긴 형식으로 만들어진다.
    public String multiInsert(){
        List<ScoreDTO> docs = new ArrayList<>();
        ScoreDTO document = null;
        //임의로 10개의 데이터를 생성하는 코드이므로 나중에 쓰지 않아도 되는 코드
        for(int i=1;i<=10;i++){
            document = new ScoreDTO(null, "multi"+i, "multi"+i, "전산실", "서울특별시", 100, 100);
            docs.add(document);
        }
        service.insertAllDocument(docs);
        return "redirect:/score/list";
    }
    @GetMapping("/paginglist")
    public String pagelist(@RequestParam("pageNo") String pageNo, Model model){
        List<ScoreDTO> pagelist = service.findAll(Integer.parseInt(pageNo));
        model.addAttribute("mongolist",pagelist);
        return "mongo/list";
    }
}

ScoreRepository

//1번 매개변수 - ScoreDTO는 Document와 매핑될 자바객체
//2번 매개변수 - 기본키타입
//인터페이스만 정의하면 Spring과 spring data내부에서 ScoreRepository의 모든 메소드와 상속하는 인터페이스의
//모든 메소드를 구현한 구현체를 자동으로 만들어준다.
public interface ScoreRepository extends PagingAndSortingRepository<ScoreDTO,String> {

}

ScoreMongoDAO

public interface ScoreMongoDAO {
	public List<ScoreDTO> findCriteria(String key, String value);
	public ScoreDTO findById(String key,String value);
	public void insertDocument(ScoreDTO doc);
	public void insertAllDocument(List<ScoreDTO> docs);
	public void update(ScoreDTO document);
	public void test1();
	public List<ScoreDTO> findAll();
	public List<ScoreDTO> findAll(int pageNo);
}

ScoreMongoDaoImpl

@Repository
@RequiredArgsConstructor
public class ScoreMongoDaoImpl implements ScoreMongoDAO{
    //spring-data-mongodb에서 제공하는 몽고디비의 핵심클래스 - 데이터를 제어할 수 있는 기능을 제공하는 클래스
    //Mybatis의 SqlSession클래스와 유사
    private final MongoTemplate mongoTemplate;
    private final ScoreRepository repository;
    @Override
    public List<ScoreDTO> findCriteria(String key, String value) {
        return List.of();
    }

    @Override
    public ScoreDTO findById(String key, String value) {
        return null;
    }

    @Override
    public void insertDocument(ScoreDTO doc) {
        //도큐먼트 한 개 삽입
        mongoTemplate.insert(doc);
    }

    @Override
    public void insertAllDocument(List<ScoreDTO> docs) {
        //도큐먼트 여러 개 삽입
        mongoTemplate.insertAll(docs);
    }

    @Override
    public void update(ScoreDTO document) {

    }

    @Override
    public void test1() {

    }

    @Override
    public List<ScoreDTO> findAll() {
        System.out.println("=============================");
        List<ScoreDTO> list = mongoTemplate.findAll(ScoreDTO.class,"score");
        System.out.println(list);
        return list;
    }

    @Override
    public List<ScoreDTO> findAll(int pageNo) {
       //PagingAndSortingRepository의 findAll메소드를 호출하면 페이징 처리가 된 객체를 전달받을 수 있다.
        //PagingAndSortingRepository의 findAll메소드 내부에서 페이징처리를 자동으로 구현해준다.

        //pageNo => 몇번째 페이지인지
        //pageSize => 한 페이지에 출력할 도큐먼트의 갯수
        //Sort객체
        Sort sort = Sort.by("property").ascending();//오름차순정렬
        Page<ScoreDTO> page = repository.findAll(PageRequest.of(pageNo,10,sort));
        //Page객체에서 한 페이지에 출력할 document를 꺼내서 리턴하기
        return page.getContent();
    }
}

ScoreDTO

//document와 매핑될 객체를 정의 - 도메인클래스
//score컬렉션의 한 document와 매핑될 객체
@Document(collection = "score")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ScoreDTO {
    @Id
    String _id;
    String id;
    String name;
    String dept;
    String addr;
    int java;
    int servlet;

}

ScoreMongoService

public interface ScoreMongoService {
	public ScoreDTO findById(String key, String value);
	public void insertDocument(ScoreDTO doc);
	public void insertAllDocument(List<ScoreDTO> docs);
	public List<ScoreDTO> findCriteria(String key,String value);
	public void update(ScoreDTO document);
	public void test1();
	public List<ScoreDTO> findAll();
	public List<ScoreDTO> findAll(int pageNo);
}

ScoreMongoServiceImpl

@Service
@RequiredArgsConstructor
public class ScoreMongoServiceImpl implements ScoreMongoService{
    private final ScoreMongoDAO dao;
    @Override
    public ScoreDTO findById(String key, String value) {
        return null;
    }

    @Override
    public void insertDocument(ScoreDTO doc) {
        dao.insertDocument(doc);
    }

    @Override
    public void insertAllDocument(List<ScoreDTO> docs) {
        dao.insertAllDocument(docs);
    }

    @Override
    public List<ScoreDTO> findCriteria(String key, String value) {
        return List.of();
    }

    @Override
    public void update(ScoreDTO document) {

    }

    @Override
    public void test1() {

    }

    @Override
    public List<ScoreDTO> findAll() {
        return dao.findAll();
    }
    //페이징처리
    @Override
    public List<ScoreDTO> findAll(int pageNo) {
        return dao.findAll(pageNo);
    }
}

index

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>몽고디비 테스트</h1>
    <hr/>
    <h3><a href="/mongodb/score/list">mongodb데이터조회</a></h3>
    <h3><a href="/mongodb/score/paginglist?pageNo=0">mongodb데이터조회(페이징처리)</a></h3>
    <h3><a href="/mongodb/score/insert">mongo document삽입하기</a></h3>
    <h3><a href="/mongodb/score/multi/insert">여러개 document삽입하기</a></h3>
</body>
</html>

list

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>Score(Mongo)</h1>
	
	<hr/>
	<table align="center" border="1" width="600">
		<tr bgcolor="skyblue">
			<th>아이디</th><th>자바</th><th>성명</th>
			<th>주소</th><th>부서번호</th>
			<th>삭제</th>
		</tr>

			<tr th:each="mongo:${mongolist}">
				<td><a
			href="#" th:text="${mongo.id}"></a></td>
				<td th:text="${mongo.java}"></td>
				<td th:text="${mongo.name}"></td>
				<td th:text="${mongo.addr}"></td>
				<td th:text="${mongo.dept}"></td>
				<td>
			<a href="mybatisDel.do?id=<%=user.getId() %>">삭제</a></td>
			</tr>
			

		<tr>
			<td colspan="6">
			<a href="/mongodb/score/paginglist?pageNo=0">1</a>
			<a href="/mongodb/score/paginglist?pageNo=1">2</a>
			<a href="/mongodb/score/paginglist?pageNo=2">3</a>
			<a href="/mongodb/score/paginglist?pageNo=3">4</a>
			<a href="/mongodb/score/paginglist?pageNo=4">5</a>
			</td>
		</tr>
	</table>
	
</body>
</html>

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글