본문 바로가기

Spring

240214 스프링 프로젝트

오늘은 어제 했던거와 같은 내용을 다시 한번 진행

 

릴리즈, 스냅샷이 무엇일까

 

pom.xml 에 어제 작성했던 라이브러리들을 추가해주고

 

servlet-context.xml 파일의 내용을 좀 수정

 

classpath:/ 의 경로는 하단 블로그 참조

 

Spring의 classpath:의 경로 위치

아래 Spring web.xml의 ContextLoaderListener의 환경설정 파일인 applicationContext.xml의 위치를 지정하는 코드에서 classpath:의 위치가 어디인가? contextConfigLocation classpath:applicationContext.xml org.springframework.web.cont

developer-joe.tistory.com

 

간단하게는 이클립스 Build Path 의  Source 쪽에 있는 폴더는 전부 ClassPath

하지만 **/java 는 자바 관련 파일들이 존재하니

보통은 /resource 폴더 밑에 다른 설정 파일들을 작성

 

db-Context.xml 파일을 만들어 db 관련 설정 내용 작성

 

db-Context 에 작성한 *-Mapper 와 mybatis-Config 파일을 생성하여

mybatis 홈페이지에 있는 구문 가져와 넣기

 

config

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">

 

Mapper

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

mapper 에는 쿼리문을 작성하면 됨

  <mapper namespace="board">
    <select id="boardList">
      Select * from boardview
    </select>
  </mapper>

 

controller 에서 어노테이션을 작성할 때

@GetMapping({"/board", "/"})

 

이렇게 여러 요청을 하나의 메소드로 처리할 수도 있음

 

 

mapper 의 

resultType = select 등 db 의 결과값

parameterType = 입력값

 

board-mapper 에서 resultType="HashMap" 으로 변경

 

<mapper namespace="board">
  <select id="boardList" resultType="HashMap">
    Select * from boardview limit 0, 20;
  </select>
</mapper>

 

결과값이 List<Map<String, Object>> 타입으로 반환됨

 

Controller 에서 Service 를 Autowired 로 하여 view 로 list를 전달

@GetMapping("/board")
public String boardList(Model model) {
  model.addAttribute("list", boardService.boardList());
  return "board";
}

 

Model 은 무엇일까, 하단 글에서 내용을 이해하는데 도움이 됐음

 

velog

 

velog.io

 

 

Spring) model

model 객체 - Controller 에서 생성된 데이터를 담아서 View 로 전달할 때 사용하는 객체. - Servelt 의 request.setAttribute() 와 유사한 역할. - Method 에 Model 타입이 지정된 경우 Model 타입의 객체를 만들어서

lopicit.tistory.com

 

어려웡

 

파라미터로 값을 받을 때 보내는 법 (어느 한 게시글 들어가보기)

boardList 에서 글 목록에 링크를 넣음

<td><a href="./detail?no=${list.board_no }">

 

BoardController 에서 글 번호인 no 값을 받음

@GetMapping("/detail")
public String detail(HttpServletRequest request, Model model) {
  String no = request.getParameter("no");
  Map<String, Object> detail = boardService.detail(no);
  model.addAttribute("detail", detail);
  return "detail";
}

 

request 를 만들어서 request.getParameter 를 해도 좋지만

@GetMapping("/detail")
public String detail(String no, Model model) {
//  String no = request.getParameter("no");
  Map<String, Object> detail = boardService.detail(no);
  model.addAttribute("detail", detail);
  return "detail";
}

 

파라미터와 메소드 파라미터의 이름이 같으면 스프링에서 자동으로 맞춰주는 기능도 있음

 

서비스에서도 값을 넘김

public Map<String, Object> detail(String no) {
  return boardRepository.detail(no);
}

 

Repository 에서 값을 받아 mybatis 로 값을 넘길 때에는 값을 같이 적어줌

게시글 하나의 값만 받아올 땐 selectOne 메소드를 사용

public Map<String, Object> detail(String no) {
  return sqlSession.selectOne("board.boardDetail", no);
}

 

Mapper 에서 detail 값 받아올 수 있게 설정

<select id="boardDetail" resultType="HashMap" parameterType="String">
  select board_no, board_title, board_content, 
  mname, board_date, board_count, board_ip 
  from board join member m 
  on m.mno = board.mno 
  where board_no=#{no}
</select>

 

mybatis 에서 parameterType 은 받은 값의 Type을 적어야 함

값을 표현할 때에는 #{값} 표현으로 사용

 

pom.xml 에서 Dependency -> scope 가 무엇일까

 

Member 목록 표현식 만들어보기

Board 가 아닌 다른 Controller 를 만들기 때문에

Controller, Service, Repository, Mapper 을 새로 만듬

 

이번에는 MemberDTO 를 만들어봄

@Getter
@Setter
public class MemberDTO {
  String mid, mname, mdate;
  int mno, mgrade;
}

 

다른 것들은 Board 만들때와 같이 만듦

DTO 에 담는 것도 Repository 에서 selectList 로 담음

public List<MemberDTO> memberList() {
  return sqlSession.selectList("member.memberList");
}

 

Mapper 설정 시 namespace 는 다른 Mapper 와 중복되면 안됨

<mapper namespace="member">
  <select id="memberList" resultType="memberDTO">
    select * from member
  </select>
</mapper>

 

다른 Mapper 의 다른 namespace 일 경우 그 안의 id 는 겹쳐도 상관 없음

 

resultType 을 memberDTO 로 설정하는 것은 mybatis-Config 에서 설정

 

<configuration>
  <typeAliases>
    <typeAlias type="org.solbum.dto.MemberDTO" alias="memberDTO"/>
  </typeAliases>
</configuration>

 

type 에 정확한 경로와 별칭을 지정해야 함

 

member.jsp 에 jstl core > forEach 를 사용하여 다른 것과 같이 전체 목록 출력 가능

 

ModelAndView 라는 객체도 있음

@GetMapping("/member3")
public ModelAndView member3() {
  List<Map<String, Object>> list = memberService.memberList2();
  ModelAndView mv = new ModelAndView("member");
  mv.addObject("list", list);
  return mv;
}

 

@ResponseBody 라는 어노테이션은 return 된 글자를 글자 그대로 화면에 출력해주는 역할을 함

@GetMapping("/member4")
public @ResponseBody String member4() {
  List<MemberDTO> list = memberService.memberList();
  return list.get(0).toString();
}

=> list 의 memberDTO 주소값이 화면에 출력됨

 

@GetMapping("/member4")
public @ResponseBody MemberDTO member4() {
  List<MemberDTO> list = memberService.memberList();
  return list.get(0);
}

=> 리턴값이 json 형태로 리턴됨

 

 

'Spring' 카테고리의 다른 글

240220 스프링 프로젝트  (0) 2024.02.20
240219 스프링 프로젝트  (0) 2024.02.19
240216 스프링 프로젝트  (2) 2024.02.16
240215 스프링 프로젝트  (0) 2024.02.15
240213 스프링 프로젝트  (0) 2024.02.13