2017년 1월 25일 수요일

자바교육/스프링교육/스프링프레임워크/스프링부트학원추천★탑크리에듀_spring을 이용한 간단한 게시판 만들기 (5)

DAO 를 보시죠~ 
일단 DB연결은 spring내에서 지원하는 Jdbc Template을 사용하였습니다. 
연결 설정은  springJDBC.xml을 참조합니다~ 
url user, password 등 값을 설정하여 dataSource를 만들고요~ 이것을 
boardDAO클래스의  속성으로 넣어주고 있습니다~ 
매하단에는 앞에서 설명한 boardservice에서 bean도 설정하고 있습니다~ 

======WebContent\WEB-INF\springContext\springJDBC.xml====== 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd"
    <beans>        
        
        <!-- DBCP 설정  --> 
        <bean id="dataSource" 
      class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <property name="driverClassName"> 
          <value>oracle.jdbc.driver.OracleDriver</value> 
      </property> 
      <property name="url"> 
          <value>jdbc:oracle:thin:@localhost:1521:orcl</value> 
      </property> 
      <property name="username"> 
          <value>scott</value> 
      </property> 
      <property name="password"> 
          <value>tiger</value> 
      </property>      
    </bean> 

        
        <bean id="boardDAO" class="board.dao.BoardDAO"> 
                <property name="dataSource"> 
                        <ref local="dataSource"/> 
                </property> 
        </bean> 
        
        <bean id="boardService" class="board.service.BoardServiceImpl"> 
                <property name="boardDAO"> 
                        <ref local="boardDAO"/> 
                </property> 
        </bean> 
    
</beans> 
==================================================================== 

다음으로...DAO내 구현은.. dataSource를 인자로 jdbcTemplate 생성 
합니다. 
sql작성시 외부 인자를 ?로 주고 이에 대응하는 값을 Object배열에 저장합니다.. 
String sql = select * from test where a = ? 
Object[] params = new Object[]{key1,key2}; 

쿼리는 다음메서드를 통해서 날리게 됩니다. 
- insert delete update경우 update() 
- select이며 하나의 Object로 반환코자할때 queryForObject() 
- select이며 다수의 Object를 List로 반환코자 할때 query() 

int jdbcTemplate.update(String sql, Object[] object) 
Object jdbcTemplate.queryForObject(String sql, Object[] object, Object object) 
list jdbcTemplate.query(String sql, Object[] object, List list) 

** Object는 RowMapper를 통해 게시판 정보를 저장하고 있는 DTO객체로 
    생성하면 한답니다~*** 

List부분의  소스만 간단히 보면 ~ 
public class BoardDAO { 
        private JdbcTemplate jdbcTemplate; 
        private DataSource dataSource; 
        
        Logger logger = Logger.getLogger(this.getClass()); 
        
        public void setDataSource(DataSource dataSource){ 
                this.jdbcTemplate = new JdbcTemplate(dataSource); 
        }        public Collection getList(int start, int end){ 
                if(logger.isDebugEnabled()){ 
                        logger.debug("DAO 'select list' mehtod..."); 
                } 
                
                String sql = "select * from(select num, title, name, regdate, bdepth, hitcount, rownum r from myboard order by bgroup desc ) where r > ? and r < ?"; 
                
                List boardList = new ArrayList(); 
                
                Object[] params = new Object[]{ 
                                new Integer(start), 
                                new Integer(end) 
                }; 
                
                boardList = this.jdbcTemplate.query(sql, params, new RowMapper(){ 
                        public Object mapRow(ResultSet rs, int rowNum) throws SQLException{ 
                                BoardDTO board = new BoardDTO(); 
                                board.setNum(rs.getInt(1)); 
                                board.setTitle(rs.getString(2)); 
                                board.setName(rs.getString(3)); 
                                board.setRegdate(rs.getString(4)); 
                                board.setBdepth(rs.getInt(5)); 
                                board.setHitcount(rs.getInt(6)); 
                                return board; 
                        } 
                }); 
                
                return boardList; 
        } 
..................................... 


이렇게 해서 간단하게 spring을 통한 게시판의 기본흐름을 적어봤구요 
list의 컨트롤의 경우 기본적인 controll를 상속받아서 하나의 컨트롤로 하나의 서비스를 처리하는 로직을 구현했는데요~ 
게시물의 쓰기, 수정, 리플쓰기등은 SimpleFormController를 상속받아서 한 컨트롤로 처리했습니다. 계속~~~ 

댓글 없음:

댓글 쓰기