[Servlet][MyBatis] Mapper 설정 #1 properties, settings, typeAliases

2022. 2. 23. 17:24JAVA/MyBatis

학습목표
1. properties 설정 방법을 학습
2. settings 설정 방법을 학습
3. typeAliases 설정 방법을 학습

 

1. properties

properties는 외부 파일에 작성하여 불러올 수도 있고 properties 엘리먼트를 직접 생성하고 하위 엘리먼트에 둘수도 있습니다.

 

config.properties (외부 파일에 작성)

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521/ORCLPDB
username=LIBRARY
password=LIBRARY
me=Lee

외부파일인 config.properties 파일을 불러오기

<properties resource="mybatis/config.properties">
	<property name="me" value="yonghwan"/>
</properties>

 

'${username}'과 같이 사용하여 필요한 속성을 불러올 수 있습니다.

<dataSource type="POOLED">
	<property name="driver" value="${driver}" />
	<property name="url" value="${url}" />
	<property name="username" value="${username}" />
	<property name="password" value="${password}" />
</dataSource>

위의 예제를 보면 driver, url, username, password는 config.properties 파일에 포함된 값으로 대체될 수 있습니다.

 

Properties는 SqlSessionFactoryBuilder.build() 메서드에 전달될 수 있습니다. 예를 들면,

	@Test
	public void propertiesPriorityTest() throws IOException {
		String resource = "mybatis/mybatis-config.xml";
		try(InputStream inputStream = Resources.getResourceAsStream(resource)){
			Properties prop = new Properties();
			
			prop.put("username", "LIBRARY2");
			prop.put("me", "kim");
			
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream,prop);
			Properties properties = factory.getConfiguration().getVariables();
			
			Assert.assertEquals(properties.get("me"), "kim");
		}
	}

위의 예제와 같이 prop 객체를 build() 메서드에 전달할 수 있습니다.

 

속성(Property) 우선순위

  • properties 엘리먼트에 명시된 속성을 가장 먼저 읽음
  • properties 엘리먼트의 클래스 패스 자원이나 url 속성으로부터 로드된 속성을 두번째로 읽음, 만약 이미 값이 존재한다면 덮어씀
  • 마지막으로 build() 메서드의 파라미터로 전달된 속성을 읽음. 앞서 로드된 값을 덮어씀

 

2. settings

런타임시 mybatis의 해위를 조정하기 위한 값

https://mybatis.org/mybatis-3/ko/configuration.html#properties

 

MyBatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org

 

setting 엘리먼트의 예제

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

 

3. typeAliases

typeAliases는 절대/상대적 경로로 표현된 자바 타입들에 별칭을 부여하는 기능입니다.

 

typeAliases 예제

	<typeAliases>
		<!-- <typeAlias alias="Member" type="member.model.vo.Member"/> --> <!-- alias 설정방법1 -->
	    <package name="member.model.vo"/>									<!--- alias 설정방법2 -->
	</typeAliases>

 

패키지로 typeAliases를 설정하는 경우 클래스 위에 @Alias 애노테이션을 사용해야합니다.

@Alias("member")
public class Member {
	private int mem_num;
...
}

 

References

source code : https://github.com/yonghwankim-dev/mybatis_study
mybatis3 : https://mybatis.org/mybatis-3/ko/configuration.html#properties