*루트
현재 생성한 파일들이다 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&characterEncoding=UTF-8&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 |
해당 부분을 추가하고 이번 포스팅은 마치겠다
'IT > IT책' 카테고리의 다른 글
코드로 배우는 스프링 (4) - CRUD 개발 준비(2) (0) | 2018.12.15 |
---|---|
코드로 배우는 스프링 (3) - CRUD 개발 준비 (0) | 2018.12.04 |
코드로 배우는 스프링 (2) - 스프링 + Mybatis (0) | 2018.12.01 |
코드로 배우는 스프링 (1) - 프로젝트 시작, 기본적인설정 (0) | 2018.12.01 |