KOSA Spring - DB와 연결 ‘

채정윤·2025년 4월 18일

Spring

목록 보기
13/25

👑 웹 3-tier

1. Presentation Tier (프리젠테이션 계층)

  • 역할: 사용자 인터페이스(UI) 및 사용자와의 상호작용
  • 구성 요소: HTML, CSS, JavaScript, ..
  • 기능: 사용자가 데이터를 입력하고 결과를 확인

2. Application Tier (비즈니스 로직 계층)

  • 역할: 비즈니스 로직을 처리하며, 프리젠테이션 계층과 데이터 계층을 연결합
  • 구성 요소: 서버 측 코드, 애플리케이션 서버
  • 기능: 요청 처리, 데이터 검증, 계산 및 비즈니스 로직을 실행

3. Data Tier (데이터 계층)

  • 역할: 데이터를 저장하고 관리합니다. 데이터베이스와의 상호작용을 통해 데이터를 읽고 쓸 수 있습니다.
  • 구성 요소: 데이터베이스 관리 시스템(DBMS)
  • 기능: 데이터의 저장, 검색, 수정, 삭제 등

개발 순서는 뒤에서부터!!!

Oracle SQL Developer

create sequence seq_board;

create table tbl_board (
  bno number(10,0),
  title varchar2(200) not null,
  content varchar2(2000) not null,
  writer varchar2(50) not null,
  regdate date default sysdate, 
  updatedate date default sysdate
);

alter table tbl_board add constraint pk_board 
primary key (bno);

insert into tbl_board(bno, title, content, writer)
  values(seq_board.nextval, '테스트 제목', '테스트 내용', 'user00');

-- 중요!!
-- 직접 DB에서 insert한것은 커밋을 해야함
commit;

create table tbl_reply(
  rno number(10, 0),
  bno number(10, 0) not null,
  reply varchar2(1000) not null,
  replyer varchar2(50) not null,
  replyDate date default sysdate,
  updateDate date default sysdate
);

create sequence seq_reply;

alter table tbl_reply add constraint pk_reply primary key(rno);

alter table tbl_reply add constraint fk_reply_board
foreign key(bno) references tbl_board(bno);

BoardMapper.xml

	...
	<insert id="insert">
		insert into tbl_board (bno,title,content,writer)
		values (seq_board.nextval, #{title}, #{content}, #{writer})
	</insert>

	<insert id="insertSelectKey">

		<selectKey keyProperty="bno" order="BEFORE"
			resultType="long">
			select seq_board.nextval from dual
		</selectKey>

		insert into tbl_board (bno,title,content, writer)
		values (#{bno},
		#{title}, #{content}, #{writer})
	</insert>
	...

📊 출력값 비교 요약

항목insertinsertSelectKey
bno 생성DB 내부에서 seq_board.nextvalMyBatis가 selectKey로 미리 조회
Java 객체에 bno 설정❌ 불가능✅ 가능
출력값 사용 (예: 이후 redirect)bno 모름bno 알 수 있음
  • 출력값(특히 bno를 클라이언트나 로그로 전달해야 할 경우) 필요하면 → insertSelectKey 사용
  • 단순 삽입만 필요하면 → insert 사용

BoardMapperTests.java

	@Test
	public void testRead() {
		BoardVO board = mapper.read(3L);
		log.info(board);

		Long bno = (long) 4;
		mapper.read(bno);
		
		mapper.read((long) 1);
	}

→ xml파일에서 항상 resultType을 체크

그리고 MyBatis resultType 도메인을 지정할때는 풀네임으로!

0개의 댓글