오늘은 어제 했던거와 같은 내용을 다시 한번 진행
릴리즈, 스냅샷이 무엇일까
pom.xml 에 어제 작성했던 라이브러리들을 추가해주고
servlet-context.xml 파일의 내용을 좀 수정
classpath:/ 의 경로는 하단 블로그 참조
간단하게는 이클립스 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 은 무엇일까, 하단 글에서 내용을 이해하는데 도움이 됐음
어려웡
파라미터로 값을 받을 때 보내는 법 (어느 한 게시글 들어가보기)
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 |