숑숑이의 개발일기
article thumbnail
Published 2023. 10. 31. 21:28
TIL TIL

logback이란?

스프링에서 SQL을 실행한 로그를 직관적으로 볼 수 있도록 도와주는 라이브러리

 

1) build.gradle dependencies에 아래 코드를 추가해주고 프로젝트 우클릭 > gradle > Refresh Gradle Project

// https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4
	implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'

 

2) rc/main/resources 경로에 log4jdbclog4jdbc.log4j2.properties 파일 생성 후 아래 사진의 코드 작성

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

 

3) application properties 파일 수정

기존 DB 연결 코드를 아래의 코드로 수정한다.

히카리를 사용할 경우 별도의 클래스를 만들어 datasource를 바꿔치기 해야 한다.

spring.datasource.hikari.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.hikari.jdbc-url=jdbc:log4jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.hikari.username=user01
spring.datasource.hikari.password=1234
spring.datasource.hikari.connection-test-query=SELECT SYSDATE FROM DUAL

 

그리고 hikari와 연동을 위해 DatabaseCofig.java 파일도 아래와 같이 추가해준다.

@Autowired  
ApplicationContext applicationContext;

//hikari 설정하기  : application.properties 파일에서 히카리 정보 알아오기 
//히카리 : 자바에서 제공하는 디비커넥션으로, 다량의 디비접속 처리가 가능하고 속도가 빠르다

@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
    return new HikariConfig();
    // application.properties의 hikiri 설정을 읽어 객체를 만들어 던져준다.
}

@Bean
public DataSource dataSource() {
    // 설정 객체값으로 데이터소스를 만들어 반환한다.
    return new HikariDataSource(hikariConfig());
}

그리고 다시 실행해보면 !! 잘붙었구나!!

 

 

mybatis를 사용한 쿼리 작성시 주의점

#{seq} : 실제 변수와 바인딩이 늦게된다. 원래 데이터 타입이 숫자면 14, 만일 문자면 '14'

${seq} : 무조건 대체한다. 숫자든 문자든 14로 내려온다

ex) #{tablename} => from 'tb_board1' (x), ${tablename} => from tb_board1 (o)

 

또한, Dao에서 작성한 쿼리를 가져올 때에는 리스트 형태로 가져와야한다면 selectList()메서드를, 결과 로우가 하나라면(스칼라 쿼리일 경우) selectOne()메서드를 사용한다.

 

Oracle에서 데이터 insert시 숫자값은 어떻게?

먼저 Oracle에는 Mysql처럼 Auto Increment가 없기때문에 seq도 값을 넣어줘야하는데, 고로 selectKey를 먼저 사용해서 일괄처리 될 수 있도록 작성했다. nvl함수의 두번째 매개변수의 경우, 앞의 값이 null일때 0을 자동으로 넣고 최종적으로 +1을 하므로 max(seq)가 null인경우 자동으로 첫 번째 글 번호가 1로 들어간다. 그외에는 +1로 동작하여 auto increment와 같은 동작을 한다!

<insert id="Board_insert" parameterType="BoardDto">
		<selectKey resultType="Integer" keyProperty="seq" order="BEFORE">
		select nvl(max(seq), 0) + 1 from tb_board
		</selectKey>
		
		insert into tb_board
		(
			seq
			,title
			,writer
			,contents
			,wdate
		)
		values 
		(
			#{seq}
			,#{title}
			,#{writer}
			,#{contents}
			,sysdate
		)
	</insert>

해당 코드에서 order의 뜻은 insert 실행시 언제 실행할 것인가를 기입한다. 우리는 insert 문을 실행하기 전에 해당 쿼리를 통해 값을 받아야 하므로 BEFORE라고 기입했다.

 

DTO에서 변수를 초기화 하는 이유

프로그래밍을 하면서 변수를 초기화하지 않으면 자동으로 null이 들어가는데 이를 if문으로 하나하나 처리 하지 않기 위해서다.

 

editplus에서는 뒤에붙이기, 앞에붙이기 기능을 지원하므로 dto의 변수초기화를 보다 쉽게할 수 있다!

profile

숑숑이의 개발일기

@숑숑-

풀스택 개발자 준비중입니다