CRUD 게시판 만들기

Seoina·2020년 1월 21일
3

2020camp

목록 보기
10/12
  1. 스프링 프레임워크 프로젝트 생성

  2. pom.xml, web.xml 설정
    - Dependency 추가
    - spring-test
    - spring-jdbc
    - mysql-connector-java
    - mybatis
    - mybatis-spring
    - web.xml에 한글 필터 추가
    스크린샷 2020-01-21 오전 10.07.15.png

  1. MYSQL DB 생성
    자신의 database에 sql로 생성

스크린샷 2020-01-21 오전 10.08.08.png

  1. root-context.xml 설정
    root-context.xml에 자신의 db에 접속할 수 있도록 db 정보 입력: JDBC 라이브러리 위치와 ssl 설정을 끄고 한글 필터로 설정. DB 생성시 설정한 계정 정보 기입.

Mybatis 사용을 위해 sqlsessionfactor connection 추가 : DB 연결 및 SQL 사용을 위해 객체를 생성하고 db 정보를 입력해둔 datasource 위치를 참고하고 Mybatis 설정파일 위치와 SQL 연동 위치 설정하고 DAO 인터페이스 사용을 위한 객체를 생성한다.

공통 네임 설정을 위한 namespace 설정

  1. DB 기초공사
  • src/main/resources 안에 mybatis-config.xml 파일을 생성한 후 Mybatis 설정 파일을 명시하기 위한 DTD를 선언한다.()

스크린샷 2020-01-21 오전 10.13.32.png
안에 아무것도 기입하지 않은 이유는, 원래는 db정보를 기입한 datasource와 sqlsessionfactor connection을 여기에 기입해야하는데, root-context.xml에 대신 기입했기 때문이다.

  • 같은 파일에 mappers라는 폴더를 생성한 후 mappers 폴더에 board-Mapper.xml 파일을 생성한다. 여기에서도 mapper임을 명시하기 위해 DTD를 선언한다.
  1. VO(DTO) 생성
    VO란 Value Object로 DB의 정보를 객체화 시키는 용도로 쓰이고, DTO란 Data Transfer Object로 외부 시스템과 데이터 통신을 하기 위해 사용한다. 우리는 VO를 사용한다.
  • com.myp.domain 패키지를 생성하고 그 아래 BoardVO class를 생성한다. 필요한 6가지의 변수의 getters와 setter를 생성해 변수를 캡슐화한다. toString()도 함께 생성한다.
  1. board-Mapper.xml 작성
  • DAO와 연동하기 위한 SQL을 작성한다. (CRUD+LIST SQL 구현)

    1. create
    	  <insert id="create">   // DAO 와 매핑을 위한 ID
    		 insert into tbl_board (title, content, writer) 
    		 values(#{title},#{content}, #{writer})
    	 </insert>	
    
    
    2. Read
    	<select id="read" resultType="com.myp.domain.BoardVO"> // Data를 받아오기 위한 resultType 명시
    		select 
    		bno, title, content, writer, regdate, viewcnt 
    		from 
    		tbl_board 
    		where bno = #{bno}
    	</select>
    
    
    3. Update
    	<update id="update">
    		update tbl_board set title =#{title}, content =#{content} 
    		where bno = #{bno}
     	</update>
    
    
    4. Delete
    	<delete id="delete">

    delete from tbl_board where bno = #{bno}

    5. ListAll
    	 <select id="listAll" resultType="com.myp.domain.BoardVO">
    		<![CDATA[  // SQL 내부에 연산자가 있을 경우 사용
    		select bno, title, content, writer, regdate, viewcnt 
    		from tbl_board 
    		where bno > 0 
    		order by bno desc, regdate desc
    		]]>  
    	</select>
  1. DAO 작성
    DAO ( Data Access Object) : 데이터 접근 객체
    Service : 컨트롤러(서블릿)의 요청사항을 DAO에 전달
  • com.myp.persistence 패키지를 생성해서 그 밑에 BoardDAO라는 Interface 생성.

스크린샷 2020-01-21 오전 10.30.02.png

  • BoardDAO interface를 구현한 BoardDAOImpl class 생성하고 sqlsession method를 이용해 간단히 DAO 구성. (여기서 주의할 점은 DAO class에서 사용한 namespace와 id가 board-Mapper.xml에서 사용한 namespace 와 id가 동일해야 한다.)
  • root-context.xml에 base-package 작성
    <context:component-scan base-package="com.myp"/>
  1. Service 작성
    service: 유지보수와 로직 프로세스를 유연하게 처리하기 위한 중간단계. (프레임워크 디자인 패턴에 들어가며, 프로젝트 규모가 커질수록 관리하기 용이하다.)
    controller -> service(interface) -> ServiceImpl -> dao

    - com.myp.service package 생성하고 그 밑에 Interface인 BoardService 작성
    스크린샷 2020-01-21 오전 10.34.10.png

    - BoardService를 인터페이스로 한 BoardServiceImpl class 생성하여 controller에서 요청될 서비스 로직을 구현한다.

  2. 게시판 목록페이지 구현

  • home.jsp 에서 form을 이용하여 게시판으로 이동하는 버튼을 생성한다.
  • listAll.jsp 생성
    게시판 목록 페이지를 생성한다.
  • Controller class 작성
    com.myp.controller에 BoardController class를 생성하여 @Controller로 컨트롤러임을 명시하고 @RequestMapping으로 주소 패턴과 주소 호출을 명시한다.
    Inject로 주입하는 대신 @autowired를 사용한다.
    스크린샷 2020-01-21 오전 10.43.22.png
  1. 글쓰기 구현

    -Get으로 단순 글쓰기 페이지를 보여주고 POST로 글쓰기 작업 완료 후 DB 전송 및 listAll.jsp에 구현한다.

  • views폴더에 regist.jsp를 생성하여 작성한다. (listAll 페이지에서 regist를 호출하고 있다)
  • controller 구현
    스크린샷 2020-01-21 오전 10.45.34.png
  1. 글읽기 구현
  • views 폴더에 read.jsp를 생성하여 작성한다 ( HTML5 으로 다중 form 전송을 포함한다)
  • controller 구현
    스크린샷 2020-01-21 오전 10.46.31.png
  1. 글수정/삭제 구현
  • views 폴더에 modify.jsp 생성하여 작성한다 (글수정도 GET/POST 2중으로 구성)
    ( 글수정과 글삭제는 read.jsp 페이지에서 작동한다)

  • 글수정 controller 구현
    스크린샷 2020-01-21 오전 10.48.11.png

  • 글삭제 controller 구현
    스크린샷 2020-01-21 오전 10.48.29.png

0개의 댓글