'자바스프링'에 해당되는 글 1건

  1. 2017.03.31 스프링에서 DB 연결하기(ver. mySQL)
2017. 3. 31. 11:31

이 자바 스프링 넘이란 놈을 하면서.....진짜....설정때문에 어마어마한 시간을 보내고 있다~


내가 자바를 싫어했던 이유가 새록새록 생각났다~


먼저 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
   <!-- print query log -->
        <dependency>
            <groupId>org.lazyluke</groupId>
            <artifactId>log4jdbc-remix</artifactId>
            <version>0.2.7</version>
        </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.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
cs

위에 것들을 추가해준다. 

mysql, mybatis 그리고 쿼리 띄어주는것까지 추가해주고,




/src/main/webapp/WEB-INF/spring/ 폴더의

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
   <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/testtable" />
        <property name="username" value="root" />
        <property name="password" value="password" />
    </bean>
 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:/mapper/**/*.xml" />
    </bean>
 
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSession" />
    </bean>
 
 
    <!-- query log -->
    <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
        <constructor-arg ref="dataSourceSpied" />
        <property name="logFormatter">
            <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
                <property name="loggingType" value="MULTI_LINE" />
                <property name="sqlPrefix" value="SQL    :  " />
            </bean>
        </property>
    </bean>
 
cs


mysql 정보는 

        <property name="url" value="jdbc:mysql://localhost:3306/testtable" /> 에

localhost:포트/스키마이름 

해주고, 

밑에 아이디랑 비번 넣어준다.


그 밑에 sqlSession은 마이바티스를 불러와서 쿼리를 넣어준다는 말인데,

쿼리문장을 넣는 곳에 경로를 넣어준다.

        <property name="mapperLocations" value="classpath:/mapper/**/*.xml" />

위 경로는 

/src/main/resources/mapper/전체폴더/전체.xml파일

이란 뜻이다.

나 같은경우는 게시판을 만들꺼니까.

/src/main/resources/mapper/board/board_sql.xml 이란 파일을 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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="user">
    <select id="selectCount" resultType="Integer">
        <![CDATA[
            SELECT count(*)  
              FROM board
        ]]>
    </select>
    <!-- <select id="selectUserId" parameterType="hashmap" resultType="Integer">
        <![CDATA[
            SELECT count(user_id) checkResult 
              FROM user 
                  WHERE user_id = #{user_id}
        ]]>
    </select> -->
</mapper>
 
cs


보드 테이블 갯수조회 쿼리만 넣었다.

값이 안들어가도 그냥 조회만되게..



/src/main/java 밑에 패키지를 만들어 주고,

나는 패키지 com.myboardtest.dao 만들었다. 

콘트롤러랑 다른 패키지를 만들었다.

그리고, 거기에

/src/main/java/com.myboardtest.dao/AbstractDAO.java 를 만들어 주고,

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
package com.myboardtest.dao;
 
import java.util.List;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
 
public abstract 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 : " + 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);
    }
}
cs


이렇게 만들고,

 얘는 abstract class라 또

src/main/java/com.myboardtest.dao/boardDAO.java 를 만들어서 AbstractDAO.java를 불러왔다.

1
2
3
4
5
6
7
8
9
10
11
package com.myboardtest.dao;
 
import org.springframework.stereotype.Repository;
 
@Repository("dao")
public class boardDAO extends AbstractDAO {
    public Integer selectCount() {
        return (Integer) selectOne("user.selectCount");
    }
}
 
cs


참고로 여기에는 서비스파일을 만드는 대신에,

어노테이션으로 @Repository("dao") 라고 만들어줬다.

아직 어노테이션은 잘 모르지만, @Repository 라는게, dao라는 이름으로 저장소같은거를 만들어줬다라고 이해했다.


그리고, Integer로 받을꺼기 때문에 인티저 클래스 만들어 주고,


*int 는 null 값을 못받고, Integer는 널 값을 받을수있기때문에 Integer로 했다.



그리고, selectOne("user.selectCount"); 은, AbstractDAO에서 selectOne이라는 클래스에 

board_sql.xml에 있는 namespace = user에서 id = selectCount 에 있는 쿼리문을 가져와서 넣는다는 거다.



그리고 홈컨트롤러 

/src/main/java/com.myboardtest.myboard/HomeController.java 에서 애네를 불러와야한다.

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
package com.myboardtest.myboard;
 
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import com.myboardtest.dao.boardDAO;
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
 
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
 
    // @Autowired
    // private SqlSessionTemplate sqlSession;
 
    /**
     * Simply selects the home view to render by returning its name.
     */
    @Autowired
    private boardDAO dao;
 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
 
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
 
        String formattedDate = dateFormat.format(date);
 
        model.addAttribute("serverTime", formattedDate);
 
        // System.out.println(sqlSession.selectOne("SELECT * FROM BOARD"));
        /*
         * boardDAO dao = new boardDAO();
         */ System.out.println(dao.selectCount());
        return "home";
    }
 
}
cs


@Autowired

private boardDAO dao;

라는 거가 아까 boardDAO.java에서 저장소에 넣은 dao를 불러온다.


System.out.println(dao.selectCount());

그리고 그냥 콘솔에서 찍어만 보았다.

결과값이 뜨더군.


-------------------------------------------------------------------------------------------------------------------------------

이 넘의 스프링 시작하는데, 너무 클래스들이 얼히고 설켜 있어서, 처음에 구조 파악하는데 오래걸렸다.

지금은 그냥 저장소에서 불러왔는데, 

서비스 패키지를 만들어 주고, 서비스들을 그곳에 모아두면 나중에 이용할때 더 편하긴 하다.

그거는 다음 포스트에 올리는걸로




'컴퓨터 > Java Spring Framework' 카테고리의 다른 글

JPA CascadeType 종류  (0) 2018.05.10
Spring Security logout Handler custom  (0) 2018.05.08
mod_jk연동 도메인 여러개  (0) 2018.03.09
톰캣 설치  (0) 2018.03.09
아파치 컴파일 설치  (0) 2018.03.09
Posted by Tyson