스프링은 2주차까지 있을 것같군
스프링 프레임워크
MVC project
네이버 : naver.com
네이버 뉴스 : news.naver.com
역순으로 입력
MVC(Model 2방식) : 웹 서비스 구축을 위한 디자인 패턴
M(Model)
V(view)
C(controller)
Model 1방식
Model 2방식
ex) Memberjoin.jsp[V] <>
MemberController.memberJoin() <>
MemberService.memberJoin() [C] <>
MemberRepository.memberJoin() <>
DB.memberTable Insert [M]
src/main/java : 자바 클래스 폴더
ssrc/main/resources
src/test/*
JRE System Library
Maven Dependencies
dependency를 작성하면 maven이 해당 라이브러리를 사용자/.m2/repository폴더에 다운받아 관리해줌
web.xml > root-context.xml > servlet-context.xml > 기본주소(/)호출 > 기본주소를 처리하는 Controller클래스의 메서드 호출 > 해당 jsp 화면 브라우저 출력
서블릿이 HttpRequest객체와 HttpResponse객체를 관리하는데 그걸 서블릿 컨테이너를 관리하고 그걸 이제는 스프링 프레임 워크에서 관리를 한다 이런 내용인가??
스프링프로젝트를 실행하면 기본주소는 가장마지막 패키지 이름귀에 /가 붙는다고 보면 됨.
ex) com.icia.study가 기본 패키지라면 실행시 기본 주소는
localhost:포트번호/study/
이후에 다른 주소요청을 하면 기본주소 위에 해장 주소가 붙는다고 보면 됨.
homeController에서 메서드를 만들어서
@RequestMapping(value=”/hello”) : 주소값에 /hello가 있으면 메서드를 실행
String 값으로 hi를 보내면 servlet-context에서 ViewResolver라는 것을 실행해
hi 값에 .jsp를 더해서 보이게 해준다.
V(jsp) > C(controller) 파라미터 전달
@RequestMapping
주소가 같아도 방식이 다르면 가능하다
1번은 보낼 때(name) 2번은 받을 변수
변수를 받아서 메서드 안에서 사용?
아래와 같은 Annotation을 붙여주면 프로젝트를 시작할 때 스프링이 해당 클래스를 Spring Bean으로 등록하여 관리해줌
@Controller
@Service
@Repository
servlet-context에서 지정한 폴더에서 @어노테이션이 붙어있는 파일들을 찾아서 관리를 한다
homeController 에서
Model 변수 사용하기
.addAttribute(“ jsp에서 사용할 내용 ”,사용할 매개변수);
jsp에서
${jsp에서 사용할 내용}
Controller에서 보낸 데이터를 jsp에서 사용할 때
Repository에서 보낸 데이터를 mapper에서 사용할 때
jsp에서 사용한 name값과 DTO 필드값이 똑같아야함
일관성
form에서 사용하는 name속성값=필드이름=DB컬럼이름
일단 sts를 끄고
C:\Users\wkddn.m2\repository\org\projectlombok\lombok\1.18.12
파워쉘에다가
java -jar lom 치고 탭키 엔터
1눌러서 sts.exe파일선택 2번뜨면 3번선택
이제 DTO클래스에서 클래스명 위에 줄에 @Data를 입력하면
getter, setter, toString등등을 만들지 않아도 할 수 있다
매개변수 포함 생성자는 없다 ㅠ
만들었는데 안보이거나 이상하면
리프레쉬 또는 클린 해보기
의존성 주입(DI, Dependency Injection
객체를 선언 할 때 new를 계속 하다보면 메모리를 계속해서 늘려가서 후에 가면 메모리를 엄청 차지하게 된다
그거 막기 위해 @Autowired를 써서 객체를 선언하고 지우는 것을 스프링이 관리하도록 명령하는 것이다
DTO에 date타입은
import java.sql.Date;
root-context를 복붙하자
root-context에서
13~19 는 데이터베이스 이름 계정 비밀번호
21~26 은 mapper 위치
잘 찾아서 내꺼랑 맞춰서 바꾸자
sql의 명령어를 사용할 수 있게 해준다??
mapper를 통해서
<mapper namespace="Trainee">
<insert id="insertTrainee" parameterType="tdto">
insert into trainee(t_name, t_age, t_phone, t_gender, t_birth, t_address)
value(#{t_name}, #{t_age}, #{t_phone}, #{t_gender}, #{t_birth}, #{t_address})
</insert>
<select id="findAll" resultType="tdto">
select * from trainee
</select>
<select id="findById" resultType="tdto" parameterType="long">
select * from trainee where t_number=#{t_number}
</select>
</mapper>
SqlSessiontemplate에서 sql의 명령어를 입력하는 파일이라고 생각하면 되나
mapper에서 쓰는 type을 줄여준다?
별칭
c태그는 출력을 도와주는 도구
링크
jsp(링크) > HomeController > Service > Repository > mapper > DB
메서드 매개변수에 값을 담아서 보낸다
DB > mapper > Repository > Service > HomeController > jsp(출력)
메서드의 리턴으로 객체에 값을 담아서 가져온다
마지막에 모델을 사용해서 jsp로 보낸다
pk값만 넘겨서 delete로 지우면 된다
삭제가 반영된 목록화면 보여주기
과정
목록에서 삭제링크 클릭
HomeController의 delete메서드 호출
중략
삭제 후 HomeController의 delete메서드의 리턴값의 “redirect:/findAll”에 의해서 서블릿은 컨트롤러의 findAll의 주소를 처리하는 메서드 호출
HomeController의 findAll 메서드 호출
이걸 안쓰면 그냥 jsp만 출력을 하고 DB에서 가져온 데이터는 따로 가져오라고 안했으니 출력 되지 않는다. 한마디로 다시 HomeController의 findAll메서드를 다시 실행 시켜서 findAll페이지를 뜨게 하는 것이다
수정
수정화면 요청
수정하고자 하는 데이터를 DB로부터 가져와서 update.jsp에 띄움
수정처리
insert와 같이 form을 사용해 DTO에 값을 담아서 sql update 명령어를 사용해서 수정한다
ex)로그인 확인
Controller
값이 맞으면 숫자가 넘어오고 틀리면 0이 온다
맞으면 index 틀리면 login
Service
Repository
없으면 null값이 넘어오네
mapper
스프링으로 넘어오니까 뭔가 여러 가지를 한번에 관리해야하다보니 복잡해진 느낌이다
자바 sql Html 등등 한번에 쓰니 어렵긴하다 ㅎㅎㅎ
sql은 기억이 잘 안나서 좀 버벅이고 ㅠㅠ
한번 다시 봐야겠다