반응형

*루트




현재 생성한 파일들이다 Test 붙은 부분은 매핑 테스트 한다고 생성 한것이고

나중엔 지울거 같으니 무시하면 된다

Board* 로시작하는 파일들을 생성해서 사용할 예정이다


*VO 생성


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.common.domain;
 
import java.util.Date;
 
public class BoardVO {
 
    private Integer bno;
    private String title;
    private String content;
    private String writer;
    private Date regdate;
    private int viewcnt;
    public Integer getBno() {
        return bno;
    }
    public void setBno(Integer bno) {
        this.bno = bno;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getWriter() {
        return writer;
    }
    public void setWriter(String writer) {
        this.writer = writer;
    }
    public Date getRegdate() {
        return regdate;
    }
    public void setRegdate(Date regdate) {
        this.regdate = regdate;
    }
    public int getViewcnt() {
        return viewcnt;
    }
    public void setViewcnt(int viewcnt) {
        this.viewcnt = viewcnt;
    }
    
    
}
 
cs



게시판의 데이터 전송을 위한 계층간 컬럼들을 설정한다 디비의 테이블명과 일치시키는게 개발시에 편하다


*root-context.xml 빈 추가



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
30
31
32
33
34
35
36
37
38
39
40
<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.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-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
    <!-- Root Context: defines shared resources visible to all other web components -->
    
    <bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="url" value="jdbc:log4jdbc:mysql://127.0.0.1:3306/book_ex?
useSSL=false&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>                  
    </bean>
    
    <!-- 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="false">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
    </bean> 
    -->
    
 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="false">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>    
    </bean>
    
</beans>
cs


해당 소스를 참고한다


*BoardDAO 생성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.common.persistance;
 
import java.util.List;
 
import com.common.domain.BoardVO;
 
public interface BoardDAO {
    
    public void create(BoardVO vo) throws Exception;
    
    public BoardVO read(Integer bno) throws Exception;
    
    public void update(BoardVO vo) throws Exception;
    
    public void delete(Integer bno) throws Exception;
    
    public List<BoardVO> listAll() throws Exception;
}
cs



*BoardMapper.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
37
38
39
40
41
<?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.common.mapper.BoardMapper">
    
    <insert id="create">
        insert into tbl_board(title, content, writer)
        values(#{title}, #{content}, #{writer})
    </insert>
    
    <select id="read" resultType="com.common.domain.BoardVO">
        select
            bno, title, content, writer, regdate, viewcnt
        from
            tbl_board
        where bno = #{bno}
    </select>
    
    <update id="update">
        update tbl_board set title = #{title}, content = #{content}
        where bno = #{bno}
    </update>
    
    <delete id="delete">
        delete from tbl_board where bno = #{bno}
    </delete>
    
    <select id="listAll" resultType="com.common.domain.BoardVO">
        <![CDATA[
            select
                bno, title, content, writer, regdate, viewcnt
            from
                tbl_board
            where bno > 0
            order by bno desc, regdate desc
        ]]>
    </select>
    
</mapper>
cs


boardMapper.xml 의 각 SQL 문의 id 속성값은 BordDAO 인터페이스와 동일하게 설정해 줘야한다



*BoardDAO의 구현 클래스 BoardDAOImpl



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.common.persistance;
 
import java.util.HashMap;
import java.util.Map;
 
import javax.inject.Inject;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
 
import com.common.domain.MemberVO;
 
@Repository
public class MemberDAOImpl implements MemberDAO {
    
    @Inject
    private SqlSession sqlSession;
    
    private static final String namespace="com.common.mapper.MemberMapper";
 
    @Override
    public String getTime() {
        // TODO Auto-generated method stub
        return sqlSession.selectOne(namespace+".getTime");
    }
 
    @Override
    public void insertMember(MemberVO vo) {
        // TODO Auto-generated method stub
        sqlSession.insert(namespace+".insertMember", vo);
    }
 
    @Override
    public MemberVO readMember(String userid) throws Exception {
        // TODO Auto-generated method stub
        return (MemberVO) sqlSession.selectOne(namespace + ".selectMember", userid);
    }
 
    @Override
    public MemberVO readWithPW(String userid, String userpw) throws Exception {
        // TODO Auto-generated method stub
        Map<String, Object> paramMap = new HashMap<String, Object>();
        
        paramMap.put("userid", userid);
        paramMap.put("userpw", userpw);
        
        return (MemberVO) sqlSession.selectOne(namespace + ".readWithPW", paramMap);
    }
 
    
}
 
cs




*BoardDAO 의 테스트 작성



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
package org.common.web;
 
import java.util.Random;
 
import javax.inject.Inject;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import com.common.domain.BoardVO;
import com.common.persistance.BoardDAO;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class BoardDAOTest {
    
    @Inject
    private BoardDAO dao;
    
    private static Logger logger = LoggerFactory.getLogger(BoardDAOTest.class);
    
    @Test
    public void testCreate() throws Exception{
        BoardVO board = new BoardVO();
        board.setTitle("새로운 글 입니다");
        board.setContent("새로은 내용 입니다");
        board.setWriter("user00");
        dao.create(board);
    }
    
    @Test
    public void testRead() throws Exception{
        logger.info("============Start testRead()================");
        logger.info(dao.read(1).toString());
        logger.info("============End testRead()================");
    }
    
    @Test
    //@Transactional
    public void testUpdate() throws Exception{
        Random r = new Random();
        BoardVO board = new BoardVO();
        board.setBno(1);
        board.setTitle("새로운 글 입니다 -- Update Test "+r.nextInt(1000000000));
        board.setContent("새로은 내용 입니다-- Update Test "+r.nextInt(1000000000));
        board.setWriter("user00-- Update Test "+r.nextInt(1000000000));
        dao.create(board);
    }
    
    @Test
    //@Transactional
    public void testDelete() throws Exception{
        dao.delete(1);
    }
}
 
 
cs


테스트를 작성했으면 JUNIT 을 실행해보고 제대로 빌드가 되는지 테스트 해보면 된다

나의 경우엔 BoardDAOImpl 의 @Repository 가 빠진것때문에 에러가 나서 좀 살펴봐야했다



마지막으로


1
2
3
4
5
6
7
8
9
10
11
<?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>
    
    <typeAliases>
        <package name="com.common.domain"/>
    </typeAliases>
    
</configuration>
cs



해당 부분을 추가하고 이번 포스팅은 마치겠다

반응형

+ Recent posts