package com.bit.springNote2.controller;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.bit.springNote2.dao.IDao;
@Controller
public class NoteController {
// servlet-context.xml 생성된 객체를 주입 받아서 사용.
// Mybatis를 이용하여 DAO를 구현하려면 sqlSession이 필요하다
@Autowired
private SqlSession sqlSession;
@RequestMapping(value = "noteForm")
public String noteForm() {
return "noteForm";
}
@RequestMapping(value = "write")
public String write(HttpServletRequest req, Model model) {
// 아래 두줄은 이해하지말고 그냥 써라 이렇게 쓰는거다 ㅇㅇ
IDao dao = sqlSession.getMapper(IDao.class);
dao.writeDao(req.getParameter("writer"), req.getParameter("content"));
return "redirect:list";
}
@RequestMapping(value = "list")
public String list(Model model) {
IDao dao = sqlSession.getMapper(IDao.class);
model.addAttribute("list",dao.listDao());
return "noteList"; // noteList호출
}
@RequestMapping(value = "delete")
public String delete(HttpServletRequest req, Model model) {
// 여기서는 자동으로 형변환을 시켜줘서 따로 intpar뭐시기를 쓸 필요가 없다.
IDao dao = sqlSession.getMapper(IDao.class);
dao.deleteDao(req.getParameter("id"));
return "redirect:list"; // noteList호출
}
}
IDao.java // interface 여기서 DAO의 속성(?) 만 설정.
다시보는 접근자
public : 접근 제한 없음
protected : 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능
default : 아무런 접근 제한자를 명시하지 않으면 default 값, 동일한 패키지 내에서만 접근 가능
private : 자기 자신의 클래스 내에서만 접근이 가능 ->> getter, setter 로 접근이 가능
다시보는 void
void의 역할은return 되는 타입이 없음을 의미.(void : 공허,공백,무효의)
즉 아무것도 리턴하지 않음을 선언해주는 것과 같다.
리턴에 대하여 void를 선언하였으므로 아무것도 리턴하지 않아야 에러가 발생하지 않는다.
IDao.java // interface
package com.bit.springNote2.dao;
import java.util.ArrayList;
import com.bit.springNote2.dto.NoteDTO;
public interface IDao {
public void writeDao(String writer, String id);
public ArrayList<NoteDTO> listDao();
public void deleteDao(String id);
}
IDao.xml <!-- 값을 처리하는 DAO를 따로 주절주절 넣지 않아도 간단하게 처리가 가능하다. -->
IDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- xml 위의 링크를 타보면 속성과 엘리먼트 값이 나온다 ㅇㅇ //경로값 확인 -->
<mapper namespace="com.bit.springNote2.dao.IDao">
<insert id="writeDao">
insert into tblNote(id, writer, content)values(tblNoteSeq.nextval,#{param1},#{param2})
</insert>
<!--
select는 무조건 값이 있기 때문에 resultType이 필요하다.
여기서 말하는 resultType은 레코드 단위의 값이라서 패키지명까지 다 입력 해줘야한다.
참조 : Arraylist<> IDao.java의 값
-->
<!-- 주의 할 점 : sql문이 특수문자에서 띄워쓰지 않아도 잘 되지만, 프로그래밍에서는 안된다. -->
<select id="listDao" resultType="com.bit.springNote2.dto.NoteDTO">
select * from tblNote order by id desc
</select>
<delete id="deleteDao">
delete from tblNote where id = #{param1}
</delete>
</mapper>
NoteDTO.java
lombok을 사용해서 어노테이션 만으로 getter, setter, AllargsConstructor를 구현한 모습
어노테이션 태그
@AllArgsConstructor
클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성
만약 필드중에서 @NonNull 애노테이션이 마크되어 있다면 생성자 내에서 null-check 로직을 자동적으로 생성
NoteDTO.java
package com.bit.springNote2.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public class NoteDTO {
private int Id;
private String Writer;
private String Content;
}
결과
NoteForm 입력리스트 출력삭제
7/29_1
SpringNote2(with Oracle)
1.app명 : springNote2(MVC Project 생성)
2.package명 : com.bit.springNote2
3.web.xml 한글 처리
4.HomeController.java에서 home 메소드의 mapping값을 home으로 수정
5.main.jsp 생성 실행
6.server.xml에서 springNote context는 주석처리
7.noteForm.jsp, noteList.jsp 복사
8.springNote에 추가된 lib 4개 복사
- mybatis lib 2개 추가
9.pom.xml에 11라인 자바 버전 -> 1.8
12라인 스프링 버전 -> 5.0.7
- JRE 버전 ->jdk11
10.servlet-context.xml
- beans 3개 추가
11.package : controller, dto, dao/mapper
12.dto/NoteDto.java 생성
13.dao/IDao.java(인터페이스 생성)
14.dao/mapper/IDao.xml
15.controller/NoteController.java 구현