SPRING3.0 #11(게시판)의 내용을 annotation를 사용해서 해본다.

 

변경되는 부분만

 

[[ applicatonContext.xml ]]

- namespace에서 beans, context, mvc를 선택해서 사용한다. 

 

- <context:component-scan base-package="test"> : test패키지 하위 모두 적용한다.

 

- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  </context:component-scan>

  ; 그중에서 제외필터를 주면 해당 부분은 제외된다. 여기서는 Controller부분은 mvc-servlet.xml에서 처리하기 때문에 제외시켰다.

 

- <mvc:annotation-driven/> : mvc기반에서 annotation사용시 필수

 

- <bean id="propertiesConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="Location" value="/WEB-INF/database.properties"/>
</bean>

  ; database.properties파일에서 db정보를 읽어와 사용한다.

 

<?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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        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-3.1.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->
    
        <!-- test하위패키지  -->

        <context:component-scan base-package="test">

     

        <!--  controller는 생성되지 않도록 제외하는 설정.
        controller는 mvc-servelt.xml에서 하기때문에 -->

       <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
       </context:component-scan>

   

    <!-- mvc기반에서 annotation사용시 필. -->

    <mvc:annotation-driven/>

 

     <bean id="propertiesConfig"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="Location" value="/WEB-INF/database.properties"/>
    </bean>

 

    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
    <!--

         <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/> -->


        <!-- database.properties파일을읽어와서 셋팅하기. -->

        <property name="driverClassName" value="${driver}"/>

        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>

        <property name="password" value="${password}"/>

  </bean>


    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:test/mybatis/mybatis-config.xml"/>
    </bean>

 

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>
   
</beans>

 

 

[[ database.properties]]

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
user=scott
password=tiger

 

 

[[ mvc-servlet.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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        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-3.1.xsd">

   

    <context:component-scan base-package="test">
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 

    <mvc:annotation-driven/>

 

    <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
    <!-- controller는 annotation설정으로 필요없음. -->
   
    <!--///////// 뷰리절버등록 //////////////
        /WEB-INF/views/insert.jsp
    -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>   
</beans>

 

* setter메소드는 필요없다.

 

[[ BoardDao.java ]]

package test.dao;

import java.util.HashMap;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import test.vo.BoardVo;
@Repository
public class BoardDao {
    @Autowired private SqlSessionTemplate sqlSessionTemplate;

        
    //페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map){
        return (List<BoardVo>)sqlSessionTemplate.selectList("getList",map);
    }
    //글번호에 해당하는 글정보 반환
    public BoardVo getInfo(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getInfo",num);
    }
    //전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map){
        return (Integer)sqlSessionTemplate.selectOne("getCount", map);
    }
    //조회수 증가
    public int addHit(int num){
        return sqlSessionTemplate.update("addHit",num);
    }
    //이전글 정보 반환
    public BoardVo getPrev(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getPrev", num);
    }
    //다음글 정보 반환
    public BoardVo getNext(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getNext", num);
    }
    //입력
    public int insert(BoardVo vo){
        return sqlSessionTemplate.insert("insert", vo);
    }
}

 

 

[[ BoardService.java  ]]

package test.service;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import test.dao.BoardDao;
import test.vo.BoardVo;
@Service
public class BoardService {
    @Autowired private BoardDao dao;

 

    // 페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map) {
        return dao.getList(map);
    }

    // 상세글보기
    public HashMap<String, BoardVo> getInfo(int num) {
        HashMap<String, BoardVo> map = new HashMap<>();
        map.put("vo", dao.getInfo(num));    //현재글에 대한 정보
        map.put("prev", dao.getPrev(num));    //이전글에 대한 정보
        map.put("next", dao.getNext(num));    //다음글에 대한 정보
       
        dao.addHit(num);//조회수 증가
        return map;
    }

    // 전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map) {
        return dao.getCount(map);
    }

    // 조회수 증가
    public int addHit(int num) {
        return dao.addHit(num);
    }

    // 이전글 정보 반환
    public BoardVo getPrev(int num) {
        return dao.getPrev(num);
    }

    // 다음글 정보 반환
    public BoardVo getNext(int num) {
        return dao.getNext(num);
    }

    // 입력
    public int insert(BoardVo vo) {
        return dao.insert(vo);
    }
}

 

 

[[ BoardListController.java ]]

package test.controller;

import java.util.HashMap;
import java.util.List;

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.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import test.page.PageUtil;
import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardListController {
    @Autowired private BoardService boardService;    


    @RequestMapping("/list.do")
    public ModelAndView list(
            @RequestParam(value="title",required=false) String title,
            @RequestParam(value="writer",required=false) String writer,
            @RequestParam(value="content",required=false) String content,
            @RequestParam(value="keyword",required=false) String keyword,
            @RequestParam(value="pageNum",defaultValue="1") int pageNum){
       
        HashMap<String, String> map = new HashMap<>();
       
        map.put("title", title);
        map.put("writer", writer);
        map.put("content", content);
        map.put("keyword", keyword);
       
        int totalRowCount = boardService.getCount(map);

        PageUtil pu = new PageUtil(pageNum, totalRowCount, 10, 10);
       
        map.put("startNum", String.valueOf(pu.getStartRow()));
        map.put("endNum", String.valueOf(pu.getEndRow()));
       
        List<BoardVo> list = boardService.getList(map);
        ModelAndView mv = new ModelAndView("boardList");
        mv.addObject("list",list);
        mv.addObject("startPageNum", pu.getStartPageNum());
        mv.addObject("endPageNum",pu.getEndPageNum());
        mv.addObject("totalPageCount",pu.getTotalPageCount());
        mv.addObject("pageNum",pageNum);
       
        //검색조건도 넘긴다. 다시 2page 조회할때 검색조건을 넘기기 위해.
        mv.addObject("title",title);
        mv.addObject("writer",writer);
        mv.addObject("content",content);
        mv.addObject("keyword",keyword);
       
        return mv;
    }
}

 

[[ BoardDetailController.java ]]

package test.controller;

import java.util.HashMap;

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.RequestParam;

import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardDetailController {
    @Autowired private BoardService boardService;


 

    @RequestMapping("/getInfo.do")
    public String detail(@RequestParam("num") int num, Model model){
        HashMap<String,BoardVo> map=boardService.getInfo(num);
       
        // model객체에 값을 담으면 뷰페이지에서 출력가능(유효함)
        model.addAttribute("vo", map.get("vo"));
        model.addAttribute("prev", map.get("prev"));
        model.addAttribute("next", map.get("next"));
       
        // String 으로 반환되는 것은 뷰이름을 의미.
        return "detail";
    }
}

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #13 (파일 업로드, fileupload/filedownload)  (0) 2013.01.27
SPRING3.0 #11(게시판)  (0) 2013.01.27
SPRING3.0 #11(annotation)  (0) 2013.01.27
SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27

+ Recent posts