✍ Today I Learned
- Member에 관한 기능을 모두 구현했으니 Board 기능을 구현할 차례!
- 여태까지는 프로세스 순서대로 구현했다면 이번엔 다음과 같이 백단부터 작성해보았다.
DB → VO → Mapper → DAO → Service → Controller → JSP - 뷰단을 가장 마지막에 출력하기 때문에 내가 어떤 파라미터를 던지고 어떤 결괏값을 받는지 잘 생각해야 한다.
[BoardVO.java]
- register, list, modify, detail 상황별 생성자를 만들고 getter, setter를 생성한다.
- board 테이블의 pk인 bno는 long 타입으로 선언한다.
[boardMapper.xml]
- mapper 패키지에 boardMapper.xml 파일을 생성하고, 먼저 dtd를 작성한다.
<?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">
- namespace를 BoardMapper로 지정하고 각각의 CRUD 상황을 생각하여 쿼리문을 작성한다. (쿼리문은 언제나 오타 조심!)
- 쿼리문의 파라미터는 #{ }을 사용하여 작성한다.
[MybatisConfig.xml]
- MybatisConfig.xml 에서 mapper에 관해 정의한다.
(이 부분을 작성하지 않아서 계속 에러가 났다^^ 참고자료) - typeAliases로 alias를 설정한다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="domain.MemberVO" alias="mvo"/>
<typeAlias type="domain.BoardVO" alias="bvo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jspdb"/>
<property name="username" value="jspuser"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/memberMapper.xml"/>
<mapper resource="mapper/boardMapper.xml"/>
</mappers>
</configuration>
[BoardDAO]
- DAO 인터페이스를 생성하고, 구현체인 DAOImpl를 생성한다.
- sqlSession의 메서드를 이용하여 DB와 연결한다. 이때, insert나 update 등 테이블이 변경되는 쿼리는 반드시
commit()
처리를 해줘야 한다.
[BoardService]
- DAO와 마찬가지로 Service 인터페이스를 생성하고, 구현체인 ServiceImpl를 생성한다.
- 인터페이스는 오로지 추상 메서드(public abstract)와 상수(public static final)만을 포함할 수 있고, 이 부분은 모든 인터페이스에 공통으로 적용되는 부분이므로 생략 가능하다. 생략된 제어자는 컴파일 시 자바 컴파일러가 자동으로 추가해준다.
[BoardCtrl.java]
- Controller는 class가 아닌 servlet으로 생성한다. URL mappings는 /brd/*로 설정하고,
doPost()
,doGet()
,service()
메서드를 선택한다. service()
메서드에 모든 로직을 작성한다. 먼저 request와 response객체를 UTF-8로 인코딩하고, path 경로를 추출하여 switch문을 작성한다.- 편의를 위해 jsp에서 받는 변수명과 DB의 컬럼명을 같게 작성했지만, 항상 같은 것은 아니므로 주의해야 한다.
getParameter()
로 전달받은 데이터는 String 타입이기 때문에 다른 타입의 데이터는 parse 과정을 거쳐야 한다.- 어떤 페이지로 이동했을 때 어떤 데이터를 불러와야 하고, 어떤 데이터가 입력되어야 하는지를 머릿속으로 그려놓고 시작하자.
[JSP 페이지]
- haeder.jsp의 nav에 Board List를 추가한다.
- list.jsp에서 session 객체 여부를 확인하여 로그인 한 유저만 register로 이동할 수 있도록 설정한다.
- register.jsp에서 writer는 session객체의 nick_name으로 설정한다. readonly 속성을 사용하여 유저가 변경할 수 없도록 한다.
- list.jsp에서 more 버튼을 클릭하여 detail.jsp로 이동한다. list, modify, remove 버튼을 만들고, session 객체의 email과 bvo 객체의 writer 간의 equal 여부를 확인하여 본인이 작성한 글만 수정/삭제할 수 있도록 한다.
- modify 버튼을 클릭하면 bno와 함께 modify.jsp로 이동한다. 쿼리문에서 where 조건절을 담당할 bno는 readonly 속성을 사용하여 유저가 변경할 수 없도록 한다.
- remove 버튼을 클릭하면 함께 전달된 bno를 이용하여 해당되는 데이터를 삭제한다.
'📝 TIL' 카테고리의 다른 글
[TIL] JSP 미니 프로젝트 기획 (0) | 2022.06.24 |
---|---|
[TIL] JSP 댓글 기능 구현 (Comment) (1) | 2022.06.21 |
[TIL] JSP 웹페이지 만들기(MyBatis, Member) (0) | 2022.06.17 |
[TIL] JSP 세션(session)으로 로그인/로그아웃 구현 (0) | 2022.06.16 |
[TIL] JSP로 CRUD 구현2 (0) | 2022.06.15 |