본문 바로가기
IT, 개발/JAVA

Spring Framework 개발 환경에서 MySql 적용하기

by 개발자스터디 2022. 2. 23.
반응형

 

 

 

 

 

오늘은 스프링 프레임워크를 구축한 후 MySql을 연동하는 방법을 알아보도록 하겠습니다.

 

스프링 프레임워크 구축 방법은 이전 글을 참고하시기 바랍니다.

 

 

1. pom.xml 설정
2. web.xml 설정 
3. dao.java 추가
4. mapper.xml 추가
5. sql-map-config.xml 추가
6. context 파일 추가(db/sql)
7. controller, service 설정

 

제가 테스트 시 사용했던 폴더 트리입니다.

 

java

 

resources

 

 

 

1. pom.xml 설정

 

pom.xml 파일에 DB 관련 dependency 추가해줍니다.

파일을 저장하면 자동으로 업데이트합니다.

 

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>testProject</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>testProject Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
      <spring.version>4.0.1.RELEASE</spring.version>
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
        <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
 
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
 
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    
    
        <!-- DB -->
    <dependency> 
        <groupId>org.mybatis</groupId> 
        <artifactId>mybatis</artifactId> 
        <version>3.3.1</version> 
    </dependency>
     
    <dependency> 
        <groupId>org.mybatis</groupId> 
        <artifactId>mybatis-spring</artifactId> 
        <version>1.2.4</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jdbc</artifactId> 
        <version>${spring.version}</version> 
    </dependency> 
    
    <dependency> 
        <groupId>commons-dbcp</groupId> 
        <artifactId>commons-dbcp</artifactId> 
        <version>1.4</version> 
       </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.31</version>
    </dependency>
   <!-- DB -->
    
    
    
    
  </dependencies>
  <build>
    <finalName>testProject</finalName>
  </build>
</project>
cs

 

2. web.xml 설정

 

web.xml 파일에 context 경로를 미리 지정해줍니다.

context 파일은 뒤에 생성하도록 하겠습니다.

 

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
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
 
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  
      <!-- 추가 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            <!-- 
                context파일 경로설정 
                나중에 context파일 생성 후 경로를 지정해주면 됩니다.
            -->
            classpath*:testProject/spring/context-*.xml
        </param-value>
    </context-param>
    
    
    
    <servlet>
       <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/config/dispatcher-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
  
  
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
</web-app>
cs

 

728x90

 

3. dao.java 추가

 

공통으로 사용할 dao 자바 파일을 생성합니다. 

필요시 사용하는 파일로 sqlSession 관리하고 insert, update, delete, select 별로 함수로 만들어두고 사용합니다.

 

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package springTest.com.test.dao;
 
import java.util.List;
import java.util.Map;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
 
 
@Repository
public class CommonDAO {
    
    @Autowired 
    private SqlSession sqlSession;
    
    public void setSqlSessionTemplate(SqlSession sqlSession)
    {
        this.sqlSession = sqlSession;
    }
    
    
    
    // insert DAO
    public int insert(String xmlId, Map<String, Object> paramMap)
    {
        
        return sqlSession.insert(xmlId, paramMap);
    }
    
 
    // update DAO
    public int update(String xmlId, Map<String, Object> paramMap)
    {
        
        return sqlSession.update(xmlId, paramMap);
    }
    
    
    // delete DAO
    public int delete(String xmlId, Map<String, Object> paramMap)
    {
        
        return sqlSession.delete(xmlId, paramMap);
    }
    
    
    // select_one DAO
    public Map<String, Object> selectOne(String xmlId, Map<String, Object> paramMap)
    {
        
        Map<String, Object> map = sqlSession.selectOne(xmlId, paramMap);
        if (map == null) {
            return null;
        } else {
            return map;
        }
        
    }
    
    
    // select_list DAO
    public List<Object> selectList(String xmlId, Map<String, Object> paramMap)
    {
    
        List<Object> list = sqlSession.selectList(xmlId, paramMap);
        if (list == null) {
            return null;
        } else {
            return list;
        }
        
    }
    
    
}
cs

 

4. mapper.xml 추가

 

쿼리를 작성해둘 mapper를 생성합니다.

mapper namespace에는 mapper의 별칭을 입력하고 쿼리 별 태그의 id는 본인이 쉽게 파악할 수 있는 id로 입력하는 것이 좋습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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="testProjectMapper">
 
    <select id="selectTable" parameterType="map" resultType="list">
        SELECT        
              IDX
            , NAME 
        FROM 
            TEST_TABLE
    </select>
    
</mapper>
cs

 

5.  sql-map-config.xml 추가

 

기본적인 설정을 하는 파일입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="cacheEnabled" value="false"/>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="jdbcTypeForNull" value="NULL"/>
        <setting name="callSettersOnNulls" value="true"/>
    </settings>
    
    <typeAliases>
        <typeAlias alias="map" type="java.util.Map"/>
    </typeAliases>
    
</configuration>
cs

 

 

반응형

 

6. context xml 파일 추가

 

context-datasource.xml 

MySql 정보 및 기본적인 설정을 입력하는 파일입니다.

property name에서 url, username, password 항목에 본인의 DB정보를 올바르게 입력합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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:jdbc="http://www.springframework.org/schema/jdbc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">
        
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://yourIP:yourPORT/DBschema"/>
            <property name="username" value="yourID"/>
            <property name="password" value="yourPW"/>
            <property name="removeAbandoned" value="true"/>
            <property name="initialSize" value="20"/>
            <property name="maxActive" value="30"/>
            <property name="validationQuery" value="select 1"/>
            <property name="testWhileIdle" value="true"/>
            <property name="timeBetweenEvictionRunsMillis" value="7200000"/>
        </bean>
        
</beans>
cs

 

 

context-sqlMap.xml

mapper와 map config파일의 경로를 지정해주는 파일입니다.

본인이 생성한 파일의 경로를 지정해줍니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:testProject/sqlmap/mapper/*.xml"/>
        <property name="configLocation" value="classpath:testProject/sqlmap/config/sql-map-config.xml"/>
    </bean>
 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
 
</beans>
cs

 

 

7.  controller, service java 파일 설정

 

controller와 service 파일을 생성합니다.

콘솔을 통해 DB 연동 확인만 해보는 테스트이기 때문에 저번에 테스트한 url 컨트롤러에 service 클래스의 메소드를 호출하는 코드만 추가하도록 하겠습니다.

 

TestController.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class TestController {
    
    @Autowired private TestService testService;
 
    @RequestMapping(value="/urlTest", method={RequestMethod.GET, RequestMethod.POST})
    public String urlTest() {
        
        testService.dbtest();
        
        return "/test/testView";
    }
    
}
cs

 

 

TestService.java

공통 DAO의 메소드를 호출하는 부분에서는 앞서 mapper.xml에서 설정한 namespace와 쿼리의 id를 조합하여 문자열로 사용합니다.

 

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
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import springTest.com.test.dao.CommonDAO;
 
@Service
public class TestService {
    
    @Autowired private CommonDAO commonDAO;
    
    public void dbtest() {
        
        Map<String, Object> tempMap = new HashMap<String, Object>();
        List<Object> resultList = new ArrayList<Object>();
        
        resultList = commonDAO.selectList("testProjectMapper.selectTable", tempMap);
        System.out.println(resultList);
    }
    
}
cs

 

콘솔을 통해 DB 테이블에 있는 내용이 resultList에 잘 들어갔는지 확인해보시기 바랍니다. ^^

 

 

 

 

 

728x90
반응형