본문 바로가기
(멘토링 1)시각화 페이지 구축_강의/1주차 : 개발환경셋팅

3. 스프링, Mariadb, MyBatis 연동, 데이터 조회

by 디벨로펀 2019. 7. 24.

1. POM.xml 수정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!-- DB -->
        <!-- Maria DB -->
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.0.3</version>
        </dependency>
 
        <!-- DBCP 데이터베이스 풀 커넥션 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
 
        <!-- Spring JDBC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
 
        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        
                <!-- Mybatis log -->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>1.16</version>
        </dependency>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

mariadb, mybatis 관련 dependency를 추가합니다.

마지막 디펜던시인 log4jdbc-log4j2-jdbc4.1은 로그를 남기기 위한 라이브러리입니다.

정리하자면 그 다음으로 로그를 어떻게 남길지에 대한 정보가 필요합니다.

이것이 logback.xml, log4jdbc.log4j2.properties 이며 뒤에서 다루도록 하겠습니다.

 

 

 

2. root-context.xml 수정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<bean id="dataSource"
        <property name="driverClassName"
            value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="url"
            value="jdbc:log4jdbc:mariadb://127.0.0.1:3306/theater" />
        <property name="username" value="root" />
        <property name="password" value="devfunpj" />
    </bean>
 
 
    <bean id="sqlSessionFactory"
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation"
            value="classpath:/mybatis/mybatis-config.xml"></property>
        <property name="mapperLocations"
            value="classpath*:/mybatis/sql/*.xml"></property>
    </bean>
 
    <bean id="sqlSession"
        class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory"
            ref="sqlSessionFactory"></constructor-arg>
    </bean>
 
    <!-- <mybatis-spring:scan base-package="com.devfun.dao" /> -->
    <context:component-scan
        base-package="com.devfun.dao"></context:component-scan>
    <context:component-scan
        base-package="com.devfun.service"></context:component-scan>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

root-context.xml를 위와 같이 수정합니다. root-context.xml은 웹 이외의 부분을 셋팅하기 위해 존재하는 곳입니다.

datasource는 db연결 정보로 "로컬주소/스키마"로 이루어져있고, ID와 패스워드를 입력합니다.

대표적인 것이 mybatis, mariadb 입니다.

로그를 확인하기 위해 log4jdb를 property에 추가했습니다.

sqlsessionfactoryBean은 mariadb 설정기능을 사용하도록 세팅하고 mapperLocation 즉 sql 문을 mybatis/sql 경로에 있는 xml파일로 한다고 명시합니다.

SqlSessionTemplate는 트랜잭션 관리와 쓰레드 처리, DB연결 및 종료를 관리하는 영역입니다.

정리하면, mybatis-config.xml(마이바티스 설정)파일과 sql을 담고있는 xml파일이 mybatis/sql 경로 안에 존재해야 합니다.

 

위에 설명한 바 같이 셋팅 파일과 sql을 작성하기 위해 resource 디렉토리 안에 위 그림과 같은 구조로 파일을 만듭니다.

그리고, 적절한 정보를 파일에 작성합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
 
<configuration>
    <!-- VO를 선언하여 mybatis/sql/하위의 쿼리들을 실행할때 resultType, parameterType에 풀 패키지명을 
        쓰지 않고 선언한 alias의 이름만 사용하여 VO를 주고 받을 수 있도록 해줌. **** 예시 **** mybatis/mybatis-config.xml 
        <typeAlias alias="TestVO" type="com.hee.heechart.VO.TestVO"></typeAlias> 
        mybatis/sql/test.xml *alias를 선언했을 때 <select id="getShowroomList" resultType="TestVO" 
        parameterType="TestVO"> SELECT * FROM TableName WHERE ColumnName = #{parameter} 
        </select> *alias를 선언하지 않았을 때 <select id="getShowroomList" resultType="패키지명.TestVO
        parameterType="om.hee.heechart.VO.TestVO"> SELECT * FROM TableName WHERE 
        ColumnName = #{parameter} </select> -->
 
    <typeAliases>
        <typeAlias type="com.devfun.vo.MovieVO" alias="movieVO" />
    </typeAliases>
 
 
</configuration>
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

mybatis-config.xml을 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
    <!-- log4jdbc-log4j2 -->
    <logger name="jdbc.sqlonly"     level="DEBUG" />
    <logger name="jdbc.sqltiming"     level="INFO" />
    <logger name="jdbc.audit"         level="WARN" />
    <logger name="jdbc.resultset"     level="ERROR" />
    <logger name="jdbc.resultsettable" level="ERROR" />
    <logger name="jdbc.connection"     level="INFO" />
 
</configuration>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs
logback


logback.xml 을 작성합니다.

 

1
2
3
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

log4jdbc.log4j2.properties 를 작성합니다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
 
<mapper namespace="com.devfun.mybatis.sql.test">
 
    <!-- 
        
        <select id="selectMember" resultType="com.example.dto.MemberVO" >
            SELECT ID, PW ,NAME FROM TEST
        </select>
        
        이렇게 해야 한다.
    -->
    
    <select id="selectMovie" resultType="movieVO">
        SELECT MOVIE_NAME, DIRECTOR, TYPES FROM MOVIE
    </select>
    
</mapper>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 test.xml을 작성합니다.

해당내용에 보면 resultType가 "movieVO"로 데이터를 movieVO에 담겠다는 것을 의미합니다.

이는 dao패키지에 작성할 것입니다.

 

 그리고 log4j.xml 코드의 root logger 부분의 Value를 warn에서 info로 수정합니다.

 


이렇게 하면 데이터를 가져오기 위한 Mybatis, mariadb 작성이 완료되었습니다.

이제는 데이터 조회/처리를 위한 JAVA코드를 작성해봅시다.

 

데이터 처리를 위한 자바코드

자바코드는 src/main/java안에 존재하며

위 구조와 같이 패키지와 파일 구조로 이루어져있습니다.

 

먼저 위에 코드를 작성해봅니다.

1
2
3
4
5
6
7
8
9
10
11
 
 
 
public interface MovieDAO {
    
    public List<MovieVO> selectMovie() throws Exception;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

MovieDAO.java를 작성합니다.

MovieDAO.java에서는 MovieVO를 담고 있는 리스트를 가지는 함수가 있는 인터페이스를 작성합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
 
 
import org.springframework.stereotype.Repository;
 
 
@Repository
public class MovieDAOImpl implements MovieDAO {
 
    @Inject
    private SqlSession sqlSession;
    
    private static final String Namespace = "com.devfun.mybatis.sql.test";
    
    @Override
    public List<MovieVO> selectMovie() throws Exception {
 
        return sqlSession.selectList(Namespace+".selectMovie");
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

MovieDAOImpl을 작성합니다.

movieDAOImpl의 경우 SqlSession을 통해 등록된 SQL 쿼리문을 실행하여 List를 리턴합니다.

 

MovieDAOImpl 작성 후 root-context.xml에 dao를 등록합니다.(스프링에서 스캔을 통해 빈으로 등록하게 하기위한 설정)

component-scan에 해당하는 내용으로 앞서 등록한 root-context.xml에서 확인 할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
 
 
 
public interface MovieService {
    
    public List<MovieVO> selectMovie() throws Exception;
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

MovieService.java를 service 패키지 아래에 interface로 작성합니다.

서비스는 비지니스 로직을 작성하는 곳이며, DB처리를 할 때 많이 이용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
 
 
import org.springframework.stereotype.Service;
 
 
@Service
public class MovieServiceImpl implements MovieService {
 
    @Inject
    private MovieDAO dao;
    
    @Override
    public List<MovieVO> selectMovie() throws Exception {
 
        return dao.selectMovie();
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

MovieServiceImpl을 작성합니다. service도 root-context.xml에 추가해야하며, 마찬가지로 기존에 작성을 완료했습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
 
 
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
 
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
    
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    @Inject
    private MovieService service;
    
    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) throws Exception{
 
        logger.info("home");
        
        List<MovieVO> movieList = service.selectMovie();
        
        model.addAttribute("movieList", movieList);
 
        return "home";
    }
    
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

HomeController를 작성합니다. RequestMapping에서는 호출하기 위한 url의 path입니다. 필자는 '/'로 작성합니다.

controller에서는 service에서 selectMovie를 호출(sql 호출)하여 model에 담은 후 해당 내용을 화면으로 전달합니다.

return "home"의 경우가 home.jsp 화면으로 전달한다는 내용입니다.

 

 

화면관련 소스

 

1
2
3
4
5
    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

home.jsp를 호출정보는 src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml에 beans로 Views에 있는 jsp파일로 호출하겠다는 정보에서 확인 할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Home</title>
</head>
<body>
    <h1>Hello world!</h1>
 
    <table>
        <thead>
            <tr>
                <th>영화이름</th>
                <th>감독</th>
                <th>장르</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${movieList}" var="movie">
                <tr>
                    <td>${movie.movie_name}</td>
                    <td>${movie.director}</td>
                    <td>${movie.types}</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>
 
 
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

home.jsp(화면)파일을 작성합니다.

home.jsp에서는 movieList를 받아 c:forEach 문으로 조회된 결과를 뿌려줍니다.

해당 화면에서는 위와 같은 내용으로 뿌렷으나

실무에서는 보통 데이터를 json으로 받아와 Dom id를 설정한 후 javascript, jquery 등으로 동적으로 뿌림을 알려드립니다.

 

 

 

 

마지막으로 Tomcat 세팅을 변경해야 합니다. 구동하기 위한 톰캣을 더블 클릭하고 URL 설정 부분의 path를 "/내용" 에서 "/" 로 변경하면 localhost:8080으로 바로 첫 페이지를 구동 할 수 있습니다.

 

 

구동결과

 

 

 

 

 

 

댓글