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



@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";
}
}
//1번 매개변수 - ScoreDTO는 Document와 매핑될 자바객체
//2번 매개변수 - 기본키타입
//인터페이스만 정의하면 Spring과 spring data내부에서 ScoreRepository의 모든 메소드와 상속하는 인터페이스의
//모든 메소드를 구현한 구현체를 자동으로 만들어준다.
public interface ScoreRepository extends PagingAndSortingRepository<ScoreDTO,String> {
}
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);
}
@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();
}
}
//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;
}
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);
}
@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);
}
}
<!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>
<!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)의 교육을 수강하고 작성되었습니다.