자바 스프링 프레임워크 - 유튜브 영상 뛰우기

2023. 7. 9. 18:53· SpringFramework
반응형

이번글에서는 간단히 유튜브 영상을 뛰우는 방법에 대해서 적어보도록 하겠다.

이번에는 추가적인 설정이 필요하다.

root-context.xml에 들어가서 

중간에 mapper.xml파일과 conpig.xml파일을 등록해준다. 

 

		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
			<property name="dataSource" ref="dataSource" />
			<property name="configLocation" value="classpath:mybatis/config.xml" />
			<property name="mapperLocations">
				<list>
					<value>classpath:mybatis/test-mapper.xml</value>
					<value>classpath:mybatis/Youtube-mapper.xml</value>
				</list>
			</property>
		</bean>

pom.xml의 dependency에 

	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.13</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.1.1</version>
		</dependency>

이 두가지를 추가해주

Mybatis를 사용하기 때문에 Java Resources > src/main/resources > mybatis라는 폴더를 만들고

config.xml과 xxxx-mapper.xml파일을 만들어준다.

config.xml에는 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="cacheEnabled" value="false" />
		<setting name="useGeneratedKeys" value="false" />
		<setting name="mapUnderscoreToCamelCase" value="false" />
	</settings>

	<typeAliases>
		<typeAlias type="com.itbank.model.TestDTO" alias="test" />
		<typeAlias type="com.itbank.model.YoutubeDTO" alias="youtube" />
	</typeAliases>
</configuration>

DTO의 약어를 정할수 있다. 만약 typeAliases로 DTO의 약어를 지정해 주지 않는다면 
다음에 나올 Mapper에서 Sql문의 결과값의 타입을 지정할때 impot문을 전부 적어줘야한다.

그것을 여기서 미리 지정해 주고 DTO를 youtube만 적는걸로 사용할 수 있다.

 

package com.itbank.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itbank.model.TestDTO;
import com.itbank.model.YoutubeDTO;
import com.itbank.testService.YoutubeService;

@Controller
@RequestMapping("/youtube")
public class YoutubeController {

	@Autowired private YoutubeService youtubeService;
	
		@GetMapping("/list")
		public ModelAndView list(){
			ModelAndView mav = new ModelAndView();
			List<TestDTO> list = youtubeService.selectList();
			mav.addObject("list",list);
			return mav;
		}
		
		@GetMapping("/add")
		public void add() {}
		
		@PostMapping("/add")
		public String add(YoutubeDTO dto) {
			int row = youtubeService.insert(dto);
			System.out.println(row + "행이 추가되었습니다");
			return "redirect:/youtube/list";				
		}
		
		@GetMapping("/view/{idx}")
		public ModelAndView view(@PathVariable("idx") int idx) {
			ModelAndView mav = new ModelAndView("youtube/view");
			YoutubeDTO dto = youtubeService.selectOne(idx);
			mav.addObject("dto",dto);
			return mav;
		}
		
		@GetMapping("/delete/{idx}")
		public String delete(@PathVariable("idx") int idx) {
			int row = youtubeService.delete(idx);
			System.out.println(row + "행이 삭제되었습니다");
			return "redirect:/youtube/list";
		}
		
		@GetMapping("/modify/{idx}")
		public ModelAndView modify(@PathVariable("idx") int idx) {
			ModelAndView mav = new ModelAndView("youtube/modify");
			YoutubeDTO dto = youtubeService.selectOne(idx);
			mav.addObject("dto",dto);
			return mav;
			
		}
		
		@PostMapping("/modify/{idx}")
		public String modify(YoutubeDTO dto) {
			int row = youtubeService.update(dto);
			System.out.println(row + "행이 수정되었습니다");
			return "redirect:/youtube/list";
			}
		}

Controller을 보면 list메서드가 있다. 이건 영상목록을 뛰우는 메서드이다.

우선 SQL문으로 Select로 받아온 메서드는 ModelAndView가 필요하니 만들어주고

많은 객체를 받아오기 위해서 List를 선언한다.

그리고 파라미터를 보내기 위해서 mav.addObject에 추가시켜준다.

 

add에서 @Getmappgin과 @PostMapping을 둘다 선언해주고 @PostMappring으로 jsp파일의 form태그로 보낸 파라미터를 받아서 @Service로 보낸다. 

그리고 redirect로 원하는 jsp페이지로 돌아간다.

 

view는 하나의 영상목록을 눌렀을 때 그 idx를 @Getmapping으로 그 idx의 view페이지와 매핑하고 @PathVariable로

int idx에 그 파라미터값을 넣는다.

그리고 똑같이 ModelAndView를 만들어주고 Service로 idx를 보낸다.

그렇게 dao를 거쳐서 DB를 가져온 다음 DTO의 변수에 값이 들어가고 그 값들을 가져오는 것이다.

 

modify는 같은 원리 이지만 다른점은 @GetMapping 에서는 idx만을 받아 service로 보내서

그 idx에 해당하는 정보들을 불러온다.

 

@PostMapping에서는 jsp페이지에서 보낸 값들을 받아서 update메서드를 실행시켜서 DB에 데이터를 추가한다.

 

 

package com.itbank.testService;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.itbank.model.TestDTO;
import com.itbank.model.YoutubeDTO;
import com.itbank.repository.YoutubeDAO;

@Service
public class YoutubeService {

	@Autowired private YoutubeDAO dao;
	
	public List<TestDTO> selectList() {
		return dao.selectList();
	}

	public int insert(YoutubeDTO dto) {
		return dao.insert(dto);
	}

	public YoutubeDTO selectOne(int idx) {
		return dao.selectOne(idx);
	}

	public int delete(int idx) {
		return dao.delete(idx);
	}

	public int update(YoutubeDTO dto) {
		return dao.update(dto);
	}
	
}
package com.itbank.repository;

import java.util.List;

import com.itbank.model.TestDTO;
import com.itbank.model.YoutubeDTO;

public interface YoutubeDAO {

	List<TestDTO> selectList();

	int insert(YoutubeDTO dto);

	YoutubeDTO selectOne(int idx);

	int delete(int idx);

	int update(YoutubeDTO dto);

}

Service와 Repository를 넘어가고

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
	"-//mybatislorg//DTD Mapper 3.0/EN"
	"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<mapper namespace="com.itbank.repository.YoutubeDAO" >

<select id="selectList" resultType="youtube">
	select * from youtube_list order by idx
</select>

	<!-- insert, update, delete 는 반환형이 int로 고정이므로 작성하지 않는다  -->
<insert id="insert" parameterType="youtube">
	insert into youtube_list
		(title, channel, thumbnail, iframe)
	values 
		(#{title},#{channel},#{thumbnail},#{iframe})
</insert>

<select id="selectOne" parameterType="int" resultType="youtube">
	select * from youtube_list
		where
			idx = #{idx}
</select>

<delete id="delete" parameterType="int">
	delete youtube_list where idx = #{idx}
</delete>

	<update id="update" parameterType="youtube">
		update youtube_list
			<set>
				title = #{title},
				thumbnail = #{thumbnail},
				channel = #{channel},
				iframe = #{iframe},
			</set>
				
			where
				idx = #{idx}
	</update>
</mapper>

Mapper.xml로 간다.

여기서 sql문을 실행해서 값을 추가,수정,불러온다.

 

여기서 중요한 점은id와  resultType과 parameterType이다.

id는 DAO의 함수이름이며  resultType는 불러온 값들이 어떤타입으로 반환되는지를 정의하는 것이다.

selectList를 보면 모든 값들을 불러왔고 그 값을 DTO파일으로 반환한다는 뜻이 된다.

parameterType은 보통 where문에 값을 넣을때 사용된다.

where문으로 특정 값만을 가져올 때  parameter를 where에 넣어서 가져온 값을들 resultType로 DTO타입이라고 정의하는'

것이다.

 

이렇게 이해를 한다면 딱히 어려운것은 없을것이다.

그렇게 가져온 값들을 전 jsp파일에서 EL태그로 ${parameter } 이런식으로 불러오면 된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="cpath" value="${pageContext.request.contextPath }" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>list.jsp</h1>
<hr>

<p>
	<a href="${cpath }/youtube/add"><button>추가</button></a>
</p>

<c:forEach var="dto" items="${list }">
	<div>
		<div><a href="${cpath }/youtube/view/${dto.idx}"><img src="${dto.thumbnail }" width="250"/></a></div>
		<div>${dto.title } | ${dto.channel }</div>
	</div>

</c:forEach>



</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="../home.jsp" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>view.jsp</h1>

<div>${dto.iframe }</div>

<h3>${dto.title }</h3>
<h3>${dto.channel }</h3>

<a href="${cpath }/youtube/delete/${dto.idx}"><button>삭제</button></a>
<a href="${cpath }/youtube/modify/${dto.idx}"><button>수정</button></a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>add.jsp</h1>
<hr>


<form method="POST">
	<p><input type="text" name="title" placeholder="제목" /></p>
	<p><input type="text" name="channel" placeholder="채널이름" /></p>
	<p><input type="text" name="thumbnail" placeholder="썸네일" /></p>
	<p><input type="text" name="iframe" placeholder="영상태그" /></p>
	<p><input type="submit" /></p>
</form>
</body>
</html>

 

JSP는 오류가 터지면 일단 페이지를 뛰워주고 오류를 찾는 형식이였지만 Spring은 실행과 동시에 

컴파일을 실행하기 때문에 오타 한자라도 발생하면 페이지를 볼수가 없다. 

그렇기에 하나만들고 뛰워보고 또 하나 만들고 이런식으로 하나씩 확인하면서 만드는게 중요하다고 생각한다.

 

앞으로 매일 포스팅은 힘들겠지만 시간이 날때마라 정리하여 국비교육이 끝났을때 다시 사용할 수 있을정도의

퀄리티는 유지해 보도록 하겠다.

 

그럼 오늘은 여기서 마치겠다.

 

반응형

'SpringFramework' 카테고리의 다른 글

스프링 프레임워크 - 사진 업로드  (0) 2023.07.10
스프링 프레임워크 - JDBC버전 뛰우는 과정  (1) 2023.07.09
스프링 프레임워크 초기세팅  (2) 2023.07.02
'SpringFramework' 카테고리의 다른 글
  • 스프링 프레임워크 - 사진 업로드
  • 스프링 프레임워크 - JDBC버전 뛰우는 과정
  • 스프링 프레임워크 초기세팅
Yamahost
Yamahost
반응형
Yamahost
꿈을 쫓는 거북이
Yamahost
전체
오늘
어제
  • 분류 전체보기 (54)
    • React (1)
    • SpringBoot (3)
    • 개인 서버(도커등) (10)
    • CS지식(공부용) (1)
    • SpringFramework (4)
    • JSP (4)
    • 오라클 DB (2)
    • 화면구현(HTML,CSS) (3)
    • JAVA 공부 (14)
    • 학원 스터디그룹 과제 (2)
    • 코딩테스트 연습 (0)
    • C언어 공부 (8)
    • 토이프로젝트 (0)
    • 과거글 (2)

블로그 메뉴

  • 홈
  • 글쓰기
  • 깃허브
  • 방명록
  • 관리자설정

공지사항

인기 글

태그

  • 뚝뚝이
  • 라오스 여행
  • 망고
  • 빠뚜사이
  • 라이트
  • 여행
  • 샤오미
  • 친구
  • 태국 여행
  • 미8
  • 지문인식
  • Mi8

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Yamahost
자바 스프링 프레임워크 - 유튜브 영상 뛰우기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.