기초/SPRING
[Spring] Maria DB 연결+SQL LOG
장동규
2020. 9. 9. 17:37
src > pom.xml
목적 : DB연결에 필요한 Dependency 추가
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Connection Pool -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- pretty sql log (로그이쁘게보이게) -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
AbstractDAO 생성
목적 : SQL함수 제어
public class AbstractDAO {
protected Log log = LogFactory.getLog(AbstractDAO.class);
@Autowired
private SqlSessionTemplate sqlSession;
protected void printQueryId(String queryId) {
if (log.isDebugEnabled()) {
log.debug("\t QueryId \t: " + queryId);
}
}
public Object insert(String queryId, Object params) {
printQueryId(queryId);
return sqlSession.insert(queryId, params);
}
public Object update(String queryId, Object params) {
printQueryId(queryId);
return sqlSession.update(queryId, params);
}
public Object delete(String queryId, Object params) {
printQueryId(queryId);
return sqlSession.delete(queryId, params);
}
public Object selectOne(String queryId) {
printQueryId(queryId);
return sqlSession.selectOne(queryId);
}
public Object selectOne(String queryId, Object params) {
printQueryId(queryId);
return sqlSession.selectOne(queryId, params);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId) {
printQueryId(queryId);
return sqlSession.selectList(queryId);
}
@SuppressWarnings("rawtypes")
public List selectList(String queryId, Object params) {
printQueryId(queryId);
return sqlSession.selectList(queryId, params);
}
}
src/main/resources
> config [폴더생성]
> spring [폴더생성]
> context-mapper.xml [파일생성]
> context-datasource.xml [파일생성]
> mybatis-config-xml [파일생성]
> sql [폴더생성]
*context-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/sql/**/*_SQL.xml" />
<property name="configLocation" value="classpath:/config/spring/mybatis-config.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSession" />
</bean>
</beans>
sqlsession > mapperLocations > value에 자신의 sql폴더에 맞는 경로 입력
*context-datasource.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
">
<!-- MySQL -->
<bean id="dataSourceProxy" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://IPADRESS:3306/DBNAME"></property>
<property name="username" value="DB_ID"></property>
<property name="password" value="DB_PW"></property>
</bean>
<!-- SQL LOG -->
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceProxy" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
</bean>
</property>
</bean>
<context:component-scan base-package="com.donggyu.project" />
</beans>
base-package : 자신의 패키지 이름 작성
아이디 패스워드, 주소, 스키마는 자신의 데이터에 맞게 입력
ex)
<property name="url" value="jdbc:mariadb://192.168.0.1/testDB" />
<property name="username" value="admin" />
<property name="password" value="pwAdmin1234!" />
*mybatis-config.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>
<!-- http://www.mybatis.org/mybatis-3/ko/configuration.html -->
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="false" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
<setting name="mapUnderscoreToCamelCase" value="true" />
<setting name="jdbcTypeForNull" value="VARCHAR" />
<!-- <setting name="callSettersOnNulls" value="true" /> -->
</settings>
<!-- MyBatis mapper 파일이 추가될 때마다 지정해줘야 . <mappers> <mapper resource="com/edu/mapper/bbs/bbs.xml"/>
<mapper resource="com/edu/mapper/comment/comment.xml"/> </mappers> -->
</configuration>
*Log4j.xml 수정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<appender name="console-infolog"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %m%n" />
</layout>
</appender>
<!-- log SQL with timing information, post execution -->
<!-- 쿼리 실행 시간을 보여주는 인포 -->
<!-- <logger name="jdbc.sqltiming" additivity="false"> <level value="INFO"
/> <appender-ref ref="console-infolog" /> </logger> -->
<!-- info : 메모리 적게먹음 (sysout,debug 메모리 많이쳐먹음) -->
<!-- Application Loggers -->
<logger name="com.donggyu.project" additivity="false">
<level value="info" />
<appender-ref ref="console" />
</logger>
<!-- Query Loggers -->
<!-- 이쁘게 정렬 해주는 인포 -->
<logger name="jdbc.sqlonly" additivity="false">
<level value="INFO" />
<appender-ref ref="console-infolog" />
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="WARN" />
<appender-ref ref="console" />
</logger>
<logger name="org.springframework.core" additivity="false">
<level value="WARN" />
<appender-ref ref="console-infolog" />
</logger>
<logger name="org.springframework.beans" additivity="false">
<level value="INFO" />
<appender-ref ref="console-infolog" />
</logger>
<logger name="org.springframework.context" additivity="false">
<level value="INFO" />
<appender-ref ref="console-infolog" />
</logger>
<logger name="org.springframework.web" additivity="false">
<level value="WARN" />
<appender-ref ref="console-infolog" />
</logger>
<!-- Root Logger -->
<root>
<priority value="off" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
유의 사항
1. DB connector의 경우 버전을 맞춰줘야 정상적으로 실행
제일 많이 나는오류 class not found, DB version 52.0, connect fail