Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- Stack
- 코딩테스트
- 크루스칼
- 생성자
- jsp
- 코테
- MVC
- dbms
- 자료구조
- generic class
- spring
- 암호학
- Queue
- python
- javascript
- BFS
- cloud computing
- dfs
- 공개키 암호화
- 가상컴퓨팅
- Algorithm
- JDBC
- 클라우드 컴퓨팅
- Java
- DB
- 자바의정석
- sql
- data structure
- JPA
Archives
- Today
- Total
PLOD
[spring] spring 과 MyBatis 연동 본문
객체지향언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크이다. JDBC를 통해 데이터베이스에 엑세스하는 작업을 갭슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복 작업을 제거한다. spring framework와 MyBatis를 연동해서 좀 더 쿼리를 좀 더 빠르게 SQL을 처리할 수 있다.
전통적인 JDBC | MyBatis |
직접 Connection을 맺고 마지막에 close() UPDATE, INSERT, DELETE 문 실행 시 ,PrepareStatement를 직접 생성 및 처리 PrepareStatement의 setVO() 등에 대한 모든 작업을 개발자가 처리 SELECT문의 경우 직접 ResultSet 처리 |
자동으로 Connection close() 가능 MyBatis 내부적으로 PrepareStatement 가능 #{}와 같이 속성을 지정하면 내부적으로 자동 처리 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리 |
MyBatis의 장점은 다음과 같다.
Ⅰ. 복잡한 쿼리나 다이나믹한 쿼리에 강하다. (but, 비슷한 쿼리는 남발하게 되는 단점이 있다.)
Ⅱ. 프로그램 코드와 SQL 쿼리의 분리로 코드가 간결해지고 유지보수성이 향상된다.
Ⅲ. JDBC의 resultType, resultClass등 VO를 사용하지 않고 조회결과를 사용하는 사용자 정의 DAO로 맵핑하여 사용할 수 있다.
Ⅳ. XML 파일로 인해 빠른 개발이 가능하여 생산성이 향상된다.
Oracle Database와 Spring 연동
OracleDatabase 동작 원리
Ⅰ . SQL문 syntax check
- library cache에서 일치하는 sql 검색
- 실행문맥 정보로 실행
- DB Buffer Cache에서 검색
- 메모리에서만 read해서 fetch하므로 soft parsing
Ⅱ . SQL문 semantic checking
- Data Dictionary Cache(Row Cache)를 사용
- logical, physical read 추가 발생
Ⅲ . optimizer - SQL 실행 경로 탐색, 비용 계산
- logical , physical read 추가 발생, cpu 사용
- Data Dictionary Cache 사용
Ⅳ . library cache에 SQL context로 cache함
V . 실행 buffer cache에서 data block 검색 data file 읽어와서 buffer cache에 cache하고 fetch함
Oracle Database를 사용하기 위해서는 Oracle Express(Oracle XE)를 설치해야 한다.
앞서 설명한 Mybatis 프레임워크를 사용해서 오라클 데이터베이스에 연동하기 위해 쿼리문을 사용한다.
Spring 프레임워크에서 다음과 같은 쿼리로 CRUD 게시판을 구현할 수 있다.
<?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">
<mapper namespace="org.zerock.mapper.BoardMapper">
<select id="getList" resultType="org.zerock.domain.BoardVO">
<![CDATA[select * from tbl_board where bno>0]]>
</select>
<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">
<![CDATA[ select seq_board.nextval from dual]]>
</selectKey>
insert into tbl_board (bno,title,content, writer)
values (#{bno}, #{title}, #{content}, #{writer})
</insert>
<select id="read" resultType="org.zerock.domain.BoardVO">
select * from tbl_board where bno=#{bno}
</select>
<delete id="delete">
delete tbl_board where bno=#{bno}
</delete>
<update id="update">
update tbl_board
set title= #{title},
content=#{content},
writer = #{writer},
updateDate = sysdate
where bno = #{bno}
</update>
<!-- 각 문자열을 이용해 검색 조건을 결합하는 형태로 하면 3개의 동적 SQL 구문처리 -->
<sql id="criteria">
<trim prefix="(" suffix=") AND " prefixOverrides="OR">
<foreach item='type' collection="typeArr">
<trim prefix="OR">
<choose>
<when test="type == 'T'.toString()">
title like '%' || #{keyword} || '%'
</when>
<when test="type == 'C'.toString()">
content like '%' || #{keyword} || '%'
</when>
<when test="type == 'W'.toString()">
writer like '%' || #{keyword} || '%'
</when>
</choose>
</trim>
</foreach>
</trim>
</sql>
<select id="getListWithPaging" resultType="org.zerock.domain.BoardVO">
<![CDATA[
select
bno, title, content, writer, regdate, updateDate, replycnt
from
(
select /*+ INDEX_DESC(tbl_board pk_board) */
rownum rn, bno, title, content, writer, regdate, updateDate, replycnt
from
tbl_board
where
]]>
<include refid="criteria"></include>
<![CDATA[
rownum<= #{pageNum} * #{amount}
)
where rn>(#{pageNum}-1) * #{amount}
]]>
</select>
<select id="getTotalCount" resultType="int">
select count(*) from tbl_board where
<include refid="criteria"></include>
bno > 0
</select>
<update id="updateReplyCnt">
update tbl_board set replycnt = replycnt + #{amount} where bno = #{bno}
</update>
</mapper>
참고)
[ORACLE] DB 구조 (garimoo.github.io)
'개발 공부 > Spring framework' 카테고리의 다른 글
[Spring] Spring Security (0) | 2024.07.25 |
---|---|
[Spring] JPA(Java Persistence API) (0) | 2024.07.03 |
[spring] Spring dependency 설정(gradle, maven) (0) | 2023.07.08 |
[spring] spring MVC - (3.View) (0) | 2023.04.17 |
[spring] spring MVC - (2.Controller) (0) | 2023.04.17 |
Comments