@XXXController 뒤에 괄호를 넣어 빈의 이름을 설정할 수 있으나, 클래스 이름과 동일하게 입력하는 것 필요(P.928)
왜? 이름을 다르게 할 경우, 클래스를 찾는 과정에서 충돌이 일어날 수 있음. 따로 입력을 하지 않는 경우, default로 클래스 이름으로 생성이 됨.
예 : @Controller("noticeController")
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
- 세션 있는지 비교한다 - if문을 넣기 위해 스크립틀릿 넣기! if문으로 전체 1~3을 감싸야함.
- 로그아웃 디자인 코드 넣기!
- 이벤트 처리하는 코드 넣기 -> 자바스크립트(DOM을 스캔해야 접근할 수 있으니)
<%--스크립틀릿--%>
<%
if(nickname != null){
%>
<%--디자인코드--%>
<form class="d-flex mb-2 mb-lg-0" role="search">
<div class="me-auto mt-2 mb-lg-0"><%=nickname %>님. </div>
<input type="button" class="btn btn-outline-success" onclick="logout()" value="로그아웃">
</form>
<%--이벤트처리 코드 --%><script>
const logout = () => {
location.href="/auth/logout";
}
</script>
<%
}
%>
테이블
create table member231228(
mem_no number(5) constraints member231228_no_pk primary key,
mem_id varchar2(50) not null,
mem_pw varchar2(10),
mem_name varchar2(30),
zipcode varchar2(10),
address varchar2(100)
)
시퀀스
CREATE SEQUENCE SCOTT.SEQ_MEMBER231228_NO
START WITH 1
MAXVALUE 99999
MINVALUE 0
NOCYCLE
NOCACHE
NOORDER;
대규모 데이터베이스 시스템에서 성능을 향상시키고 식별자의 고유성을 유지하는 데 도움
- 여기서 mem_no는 화면에서 입력받는 값이 아니라 오라클 시퀀스로 입력받는 값임.
- 채번된 숫자를 유지해야한다 왜? board_master 테이블 사용 번호를 첨부파일 등록하는 board_sub테이블에도 한번 더 사용해야하기 때문이다!!
- Insert메소드를 통해 성공하면 1, 실패하면 0을 반환받음. 그 result가 필요한 것이 아니고, Insert된 정보는 no를 통해 꺼내와야하니, 파라미터에 잘 담아둔다.
- 그러기 위해서 xml에 useGeneratedKeys를 true로 하면서, 컬럼명과 사용명을 표기한다. (default는 false임)
✅ [[MyBatis]] insert 시 id 값 가져오기 (useGeneratedKeys, keyProperty)
XXX.xml 파일에 insert 문을 넣을 때, 두 구문을 추가한다.
insert 될 때의 파라미터 값에서 저장해 두고 싶은 id를 표시해두어서 키를 생성하는 것을 설정해 둘 수 있다.
언제 쓰느냐? 저장해 둔 키값을 활용해서 다른 메소드를 실행할 수 있다.
테이블이 1:N의 관계이고 2개 이상의 테이블에 Insert 처리는? useGeneratedKeys 사용
memberInsert() 메소드에서 해당 예시를 자세히 확인해보자
xml에도 useGenerateKeys를 사용하기 위해 true로 작성해야함.
또 한 명이 입력하던 중에 다른 사람의 데이터가 또 들어오면 충돌이 일어날 수 있으니, 채번한 번호를 가져오자마자 다른 테이블에도 더할 때 사용할 수 있다.
<insert useGeneratedKeys="true" id="memberInsert" parameterType="map" keyColumn="mem_no" keyProperty="mem_no">
Insert into MEMBER231228(mem_no, mem_id, mem_pw, mem_name,
zipcode, address, mem_email, gubun) VALUES(SEQ_MEMBER231228_NO.nextval,#{mem_id},#{mem_pw},#{mem_name}, #{zipcode},#{address},#{mem_email},#{gubun})</insert>