티스토리 뷰

It

Springi Batis 7-2 SqlMap 설정

Torrent green93 2023. 1. 31. 21:53
반응형

Springi Batis 7-2 SqlMap 설정

SqlMapConfig.xml 파일 설정

데이터베이스 접속에서부터 실제 사용할 SQL Map 들까지 모든 정보들을 프레임워크에 제공하는 SQL Map Config 파일 설정

<settings>

lazyLoadingEnabled : 늦은 로딩(데이터 사용시 select)을 사용할지 여부(기본값: true)

cacheModelsEnabled : 캐시를 사용할지 여부(기본값 : true)

enhancementEnabled : 런타임시 늦은 로딩 기능 향상 여부(CGLIB 필요) (기본값: true)

useStatementNamespace : sql 호출시 namespace 사용 여부 (기본값: false)

maxRequests : 한꺼번에 SQL문을 수행할 수 있는 쓰레드의 수 (기본값 : 512)

maxSessions : 주어진 시간동안 활성화될 수 있는 세션의 수(기본값 : 128)

maxTransactions : 한꺼번에 SqlMapClient.startTransaction()에 들어갈 수 있는 쓰레드의 최대 개수 (기본값 : 32)

<properties>

Resource : 클래스패스 상에 있는 리소스 (혹은 파일)

url : Uniform Resource Locator (URL)

<typeAlias>

alias : 클래스의 별칭을 정의

type : 실제 클래스의 완전한 이름

기본적으로 내장된 몇몇 typeAlias 값

JDBC : com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig

JTA : com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig

EXTERNAL : com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig

SIMPLE : com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory

DBCP : com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

JNDI : com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

string : java.lang.String

int/integer : java.lang.Integer

object : java.lang.Object

map : java.util.Map

hashmap : java.util.HashMap

list : java.util.List

arraylist : java.util.ArrayList

<transactionManager>

type : 사용할 트랜잭션 관리자를 표시

<dataSource> : 사용할 데이터소스 팩토리 지정

Spring JDBC에서의 Transaction Manager 와 동일

<sqlMap>

resource : 클래스패스에 있는 SQL Map 파일

url : Uniform Resource Locator (URL)

SqlMapConfig.xml 파일 예

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMapConfig

PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<properties resource="sqlMapConfig.properties" />

<settings

cacheModelsEnabled="true" enhancementEnabled="true"

lazyLoadingEnabled="true" maxRequests="32"

maxSessions="10" maxTransactions="5"

useStatementNamespaces="false" />

<typeAlias type="com.sds.hr.vo.Country" alias="country" />

<transactionManager type="JDBC" >

<dataSource type="SIMPLE">

<property name="JDBC.Driver" value="${driver}"/>

<property name="JDBC.ConnectionURL" value="${url}"/>

<property name="JDBC.Username" value="${username}"/>

<property name="JDBC.Password" value="${password}"/>

</dataSource>

</transactionManager>

<sqlMap resource="com/multicampus/biz/user/user-mapping.xml" />

</sqlMapConfig>

Mapped Statements

statement, select, insert, update, delete, procedure

statement는 자주 사용되지 않음.

엘리먼트
속성
자식 요소
메소드
<select>
id
parameterClass
resultClass
parameterMap
resultMap
cacheModel
모든 동적인 요소
모든 데이터 조회
<insert>
id
parameterClass
parameterMap
모든 동적인 요소
<selectKey>
데이터 입력
<update>
id
parameterClass
parameterMap
모든 동적인 요소
데이터 수정
<delete>
id
parameterClass
parameterMap
모든 동적인 요소
데이터 삭제

Mapped Statements 사용하기

<select /> 요소

데이터를 조회하는 기본적인 구문을 작성할 때 사용. select 구문 사용

<sqlMap>

<select id="getUser" parameterClass="string"

resultClass="com.multicampus.biz.vo.UserVO" >

SELECT ID, PASSWORD, NAME, ROLE

FROM USERS WHERE ID=#id#

</select>

</sqlMap>

<insert /> 요소

insert sql 구문 사용. <selectKey /> 요소를 포함할 수 있음.

<sqlMap>

<insert id="addBoard" parameterClass="com.multicampus.biz.vo.BoardVO">

<selectKey keyProperty="seq" resultClass="int">

SELECT BOARD_SEQ.NEXTVAL AS SEQ FROM DUAL

</selectKey>

INSERT INTO BOARD(SEQ, TITLE, WRITER, CONTENT)

VALUES (#seq#, #title#, #writer#, #content#)

</insert>

</sqlMap>

<update />, <delete /> 요소

<sqlMap>

<update id="updateUser">

UPDATE BOARD SET TITLE=#title#, CONTENT=#content#

WHERE SEQ=#seq#

</update>

<delete id="deleteUser">

DELETE BOARD

WHERE SEQ=#seq#

</delete>

</sqlMap>

Mapped Statements 속성

id 속성

매핑 파일을 검색하기 위한 key값. Unique해야 함.

parameterClass 속성

자바클래스의 전체 경로를 포함한 이름을 지정함.

여러 개의 데이터를 전달하기 위해 VO 객체를 사용할 때 지정함.

이름이 너무 긴 경우 <typeAlias /> 엘리컨트를 이용해 별칭을 사용할 수 있음

VO 객체의 각 속성을 파라미터로 전달

파라미터의 명시적 지정을 위해 해쉬 사용 : #property#

<typeAlias alias="user" type="com.multicampus.biz.user.vo.UserVO"/>

<insert id="insertUser" parameterClass="user">

INSERT INTO USERS(ID, PASSWORD, NAMD, ROLE)

VALUES(#id#, #password#, #name#, #role#)

</insert>

parameterMap 속성

parameter의 속성 순서를 지정하고 SQL 문에서는 해쉬 대신에 ?를 사용할 수있음.

<sqlMap>

<parameterMap id="userParaMap" class="com.multicampus.biz.vo.UserVO">

<parameter property="id" />

<parameter property="password" />

<parameter property="name" />

<parameter property="role" />

</parameterMap>

<insert id="insertUserUseParaMap" parameterMap="userParaMap">

INSERT INTO USERS(ID, PASSWORD, NAME, ROLE)

VALUES (?, ?, ?, ?)

</insert>

</sqlMap>

resultClass 속성

ResultSetMetaData에 기반하여 VO객체의 속성에 자동 매핑시킴

VO 객체의 속성명과 SQL문으로 조회된 결과 필드명이 일치하는 경우 자동 매핑함.

단점 : type 명시불가, 관련 데이터 자동 로드 기능 없음. 약간의 성능 저하

<sqlMap>

<typeAlias alias="user" type="com.multicampus.biz.user.vo.UserVO"/>

<select id="getUser" parameterClass="string" resultClass="user">

SELECT ID, PASSWORD, NAME, ROLE FROM USERS WHERE ID=#id#

</select>

</sqlMap>

resultMap 속성

조회된 결과물의 필드명과 VO객체의 속성명이 일치하지 않는 경우 직접 명시적으로 매핑할 수 있음

<sqlMap>

<resultMap id="userResultMap" class="com.multicampus.biz.vo.UserVO">

<result property="id" column="ID" />

<result property="password" column="PWD" />

<result property="name" column="NAME" />

<result property="role" column="ROLE" />

</resultMap>

<select id="getUserList" resultMap="userResultMap">

SELECT * FROM USERS

</select>

</sqlMap>

반응형

'It' 카테고리의 다른 글

생성자 상속 클래스  (0) 2023.02.02
골프 PAR(기준타수)란  (0) 2023.02.01
마이크로프로그래밍  (0) 2023.01.30
파이썬 클래스, 메소드, 메서드,모듈  (0) 2023.01.29
C언어 출력 printf()  (0) 2023.01.28