

MyBatis 공식 홈페이지 (http://www.mybatis.org/mybatis-3/ko)



Config
Location : http://mybatis.org/dtd/mybatis-3-config.dtd
Key type : Public ID
Key : -//mybatis.org//DTD Config 3.0//EN
Mapper
Location : http://mybatis.org/dtd/mybatis-3-mapper.dtd
Key type : Public ID
Key : -//mybatis.org//DTD Mapper 3.0//EN



XML 파일 생성 시 에러 발생 해결 방법

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<settings>
<!-- Java -> DB로 INSERT,UPDATE 시 Java의 null 값을 DB의 NULL로 인식하도록 설정-->
<setting name="jdbcTypeForNull" value="NULL" />
<!-- DB의 UnderScore (_) 표기법 <-> Java의 Camel 표기법
두 표기법이 서로 변환 될 수 있도록 매핑하여
Java 필드명(memberId)과 DB 컬럼명(MEMBER_ID)가 서로 연결되게 함
-->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
<?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="연결할 Mapper 인터페이스 파일 경로 작성 (필수)">
<!-- 해당 태그는 무조건 삭제!! -->
<!--<cache-ref namespace=""/>-->
<!-- 수행 하려는 SQL 구문 태그 작성-->
<select id="" parameterType="" resultType="">SQL 작성</select>
<insert id="" parameterType="">SQL 작성</insert>
<update id="" parameterType="">SQL 작성</update>
<delete id="" parameterType="">SQL 작성</update>
</mapper>

*Connection : DB 연결 정보를 담고있는 객체(이게 있어야 JDBC 수행 가능
*Pool : 수영장 웅덩이...모여있는 곳
*Connection Pool : Connection이 모여있는 곳
Connection Pool
- Server 실행 시 DB와 연결된 Connection을 일정 개수 생성
- 클라이언트 요청 시 만들어진 Connection 대여
- 요청이 처리 완료되면 다시 Connection 반납 받음
-> 생성/소멸(반환) 걸리는 시간이 현격히 감소
-> 대기열 + DB 연결 과부하 예방
#오라클 DB 연결 정보
spring.datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@IP주소:포트번호:DB이름
spring.datasource.hikari.username=계정명
spring.datasource.hikari.password=비밀번호
#풀이 연결을 사용할 수 있을 때까지 대기하는 최대 시간(ms)을 지정
spring.datasource.hikari.connection-timeout=30000
#풀의 최대 연결 수 설정
spring.datasource.hikari.maximum-pool-size=20
#연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간(ms)을 지정
spring.datasource.hikari.idle-timeout=600000
#연결 풀의 이름을 지정
spring.datasource.hikari.pool-name=MyHikariCP
#자동 커밋 끄기
spring.datasource.hikari.auto-commit=false
/* @Configuration
* - 설정용 클래스임을 명시
* + 객체로 생성해서 내부 코드를 서버 실행 시 모두 수행
*
* @PropertySource("경로")
* - 지정된 경로의 properties 파일 내용을 읽어와 사용
* - 사용할 properties 파일이 다수일 경우
* 해당 어노테이션을 연속해서 작성하면 된다.
*
* @ConfigurationProperties(prefix = "spring.datasource.hikari")
* - @PropertySource 로 읽어온 properties 파일의 내용 중
* 접두사(앞부분, prefix)가 일치하는 값만 읽어옴
*
*
* @Bean
* - 개발자가 수동으로 생성한 객체의 관리를
* 스프링에게 넘기는 어노테이션(Bean 등록)
*
*
* DataSource : Connection 생성 + Connection Pool 지원하는 객체를
* 참조하기 위한 Java 인터페이스
* (DriverManager 대안, Java JNDI 기술 이용)
*
*
*
* @Autowired
* - 등록된 Bean 중에서
* 타입이 일치하거나, 상속관계에 있는 Bean을
* 지정된 필드에 주입
* == 의존성 주입(DI, Dependency Injection, IOC와 밀접한 기술)
*/
@Configuration
@PropertySource("classpath:/config.properties")
public class DBConfig {
// 필드
// org.springframework.context.ApplicationContext;
@Autowired // (DI, 의존성 주입)
private ApplicationContext applicationContext; // application scope 객체 : 즉, 현재 프로젝트
//////////////////////// HikariCP 설정 ///////////////////////
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari") // prefix == 접두사
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource(HikariConfig config) {
// 매개변수 HikariConfig config
// - 등록된 Bean 중 HikariConfig 타입의 Bean 자동으로 주입
DataSource dataSource = new HikariDataSource(config);
return dataSource;
}
//////////////////////// MyBatis 설정 ///////////////////////
@Bean
public SqlSessionFactory sessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// mapper.xml(SQL) 파일이 보이는 경로 지정
// - MyBatis 코드 수행 시 mapper.xml을 읽을 수 있음
// sessionFactoryBean.setMapperLocations("현재프로젝트.자원.어떤파일");
sessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mappers/**.xml"));
// 해당 패키지 내 모든 클래스의 별칭을 등록
// - MyBatis는 특정 클래스 지정 시 패키지명.클래스명을 모두 작성해야함
// -> 너무 길다..긴 이름을 짧게 부를 별칭 설정할 수 있음
// setTypeAliasesPackage("패키지") 이용 시
// 클래스 파일명이 별칭으로 등록
// ex) edu.kh.todo.model.dto.Todo --> Todo(별칭 등록)
sessionFactoryBean.setTypeAliasesPackage("edu.kh.todo");
// MyBatis 설정 파일 경로 지정
sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis-config.xml"));
// 설정 내용이 모두 적용된 객체 반환
return sessionFactoryBean.getObject();
}
// SqlSessionTemplate : Connection + DBCP + MyBatis + 트랜잭션 제어 처리
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
// DataSourceTransactionManager : 트랜잭션 매니저(제어 처리)
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
spring.application.name=todoList-boot
# 서버 포트 80으로 변경
server.port=80
#Spring.devTools 관련 설정
spring.devtools.livereload.enabled=true
spring.devtools.restart.enabled=true
spring.thymeleaf.cache=false
#로깅 레벨 지정
# (trace < debug < info < warn < error < fatal)
logging.level.edu.kh.todo=debug
