본문 바로가기

플밍 is 뭔들/SPRING

[SPRING] 마리아(Maria)DB연동 및 Mybatis 설정하기

※ 순서
1. pom.xml에 관련 라이브러리 추가하기
2. root-context.xml에 bean 설정하기
3. mybatis관련 config파일과 쿼리가 작성될 파일 생성하기
4. DB가 연동이 됐는지 테스트 하기


※ 구조
프로젝트의 구조는 아래와 같다.



※ 상세설명
1. pom.xml에 관련 라이브러리 추가하기
라이브러리는 <dependencies> </dependencies> 안에 추가해준다.

pom.xml
<!-- 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>

2. root-context.xml에 bean 설정하기
sqlSessionFactory의 configLocation은 Mybatis의 config파일의 위치를 지정해준다.
mapperLocation에는 쿼리가 작성될 파일들의 위치를 지정해준다. 아래 설정은 sql폴더 하위의 xml파일을 모두 매핑한다는 의미이다.

root-context.xml
<!-- DB -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="org.mariadb.jdbc.Driver"></property>
        <property name="url" value="jdbc:mariadb://localhost:3306/데이터베이스명"></property>
        <property name="username" value="아이디"></property>
        <property name="password" value="비밀번호"></property>
    </bean>
 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <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>

3. mybatis관련 config파일과 쿼리가 작성될 파일 생성하기
mybatis-config.xml파일은 설정관련 파일이고 sql폴더 안의 하위 xml 파일은 쿼리가 작성될 xml파일들이다.

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>
      <!--
            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 alias="TestVO" type="com.hee.heechart.VO.TestVO"></typeAlias>
      </typeAliases>
 
 
</configuration>

test.xml
<?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="com.hee.heechart">
      <select id="getTestValue" resultType="TestVO" parameterType="TestVO">
            SELECT * FROM TEST WHERE TESTINPUT = #{testInput}
      </select>
</mapper>

4. DB가 연동이 됐는지 테스트 하기
DB에 테스트용 테이블을 만들어 놓고 test.xml에 파라미터값으로 1이 들어가면 TestVO가 들어가있는 List가 리턴되고
그렇지 않으면 DB에서 조회가 되지 않기 때문에 빈 리스트가 리턴되도록 했다.

TestController.java
@Controller
public class TestController {
      
      @Autowired
      TestService TestService;
      
      @RequestMapping(value ="goTestPage.do" , method = RequestMethod.POST)
      public String goTestPage(Model model, HttpServletRequest request){
            
            String testInput = (String)request.getParameter("testInput");
            TestVO testVO = new TestVO();
            testVO.setTestInput(Integer.parseInt(testInput));
            
            List<TestVO> list = TestService.getTestValue(testVO);
            
            if( list.size() > 0 ){
                  model.addAttribute("output", "Success_DB_Connection");
            }else{
                  model.addAttribute("output", "Fail_DB_Connection");
            }
            
            return "test";
      }
}

TestService.java
public interface TestService {
      
      public List<TestVO> getTestValue(TestVO testVO);
}

TestServiceImpl.java
@Repository
public class TestServiceImpl implements TestService {
      
      @Autowired
      TestDAO TestDAO;
      
      @Override
      public List<TestVO> getTestValue(TestVO testVO){
            return TestDAO.getTestValue(testVO);
      }
}

TestVO.java
public class TestVO {
      
      private int testInput;
      private int testOutput;
      
      public int getTestInput() {
            return testInput;
      }
      public void setTestInput(int testInput) {
            this.testInput = testInput;
      }
      public int getTestOutput() {
            return testOutput;
      }
      public void setTestOutput(int testOutput) {
            this.testOutput = testOutput;
      }
      
}

TestDAO.java
@Repository
public class TestDAO {
      
      @Autowired
      private SqlSession SqlSession;
      
      public List<TestVO> getTestValue(TestVO testVO){
            return SqlSession.selectList("com.hee.heechart.getTestValue", testVO);
      }
}

test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>test</title>
<script src="/resources/js/jquery/jquery-3.2.1.js"></script>
<script type="text/javascript">
      $(document).ready(function(){
            var output = '<c:out value = "${output}"/>';
            debugger;
            if(output == "Success_DB_Connection"){
                  $("#result").text("디비 연결 성공");
            }else if(output == "Fail_DB_Connection"){
                  $("#result").text("디비 연결 실패");
            }
      });
</script>
</head>
<body>
      <p id="result"> 테스트 결과갑 출력 </p>
</body>
</html>

결과화면