ARTICLE_ID : 진짜 글의 id
ARTICLE_NUMBER : 사용자에게 보여줄 글 번호
articleDAO.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 | <mapper namespace="ArticleDAO"> <select id="nextArticleSeq" resultType="_int"> SELECT ARTICLE_ID_SEQ.NEXTVAL FROM DUAL </select> <select id="nowDate" resultType="string"> SELECT TO_CHAR( SYSDATE, 'YYYYMMDD' ) FROM DUAL </select> <insert id="insertNewArticle" parameterType="ArticleVO"> INSERT INTO ARTICLE ( ARTICLE_ID /* AR-20160421-000001 */ , ARTICLE_NUMBER /* 1 */ , SUBJECT , DESCRIPTION , WRITER , CREATED_DATE , MODIFIED_DATE ) VALUES ( #{articleId} , #{articleNumber} , #{subject} , #{description} , #{writer} , SYSDATE , SYSDATE ) </insert> | cs |
쿼리를 만들어 줍니다. 현재 articleNumber와 nextArticleNumber seq를 동시에 가져올 수 없으므로 미리 이전에 만들어줍니다.
DAO 인터페이스에서 실행할 쿼리를 순서대로 적어줍니다.
1 2 3 4 5 6 7 8 9 10 11 | public interface ArticleDAO { /** ************************************ ************************************ */ public int nextArticleSeq(); public String nowDate(); public int insertNewArticle(ArticleVO articleVO); } | cs |
그리고 DAOImpl로 가서 SqlSession을 실행시킨뒤 결과 값을 가져옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class ArticleDAOImpl extends SqlSessionDaoSupport implements ArticleDAO{ @Override public int insertNewArticle(ArticleVO articleVO) { return getSqlSession().insert("ArticleDAO.insertNewArticle", articleVO ); } @Override public int nextArticleSeq() { return getSqlSession().selectOne("ArticleDAO.nextArticleSeq"); } @Override public String nowDate() { return getSqlSession().selectOne("ArticleDAO.nowDate"); } | cs |
Biz 인터페이스에서 새 글을 쓰는 writeNewArticle을 만들어줍니다.
BizImpl에서
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 | public class ArticleBizImpl implements ArticleBiz { private ArticleDAO articleDAO; public void setArticleDAO(ArticleDAO articleDAO) { this.articleDAO = articleDAO; } @Override public boolean writeNewArticle(ArticleVO articleVO) { // 만들지 않은 것은 던진다고 알려준다는 뜻 // throw new NotImplementedException(); int nextArticleId = articleDAO.nextArticleSeq(); String nowDate = articleDAO.nowDate(); /** * ArticleID의 형식 * AR-20160421-000001 */ String articleId = "AR-" + nowDate + "-" + lpad(nextArticleId + " ", 6, "0"); articleVO.setArticleNumber(nextArticleId); articleVO.setArticleId(articleId); return articleDAO.insertNewArticle(articleVO) >0 ; } /** * * @param source 원본 * @param length 만들어야 하는 길이 * @param defValue 채워질 글자 * @return */ private String lpad(String source, int length, String defValue) { /* * 100 : 3 * 000100 : 6 */ int sourceLength = source.length(); int needLength = length - sourceLength; for ( int i=0; i<needLength; i++ ) { source = defValue + source; } return source; } | cs |
쿼리를 실행시키면서 얻은 now date와 nextArticleNumber를 가지고 articleId를 만들어줍니다.
그리고 articleVO에 넣어준뒤 DAO.insertArticle을 실행시켜주는 문장을 만듭니다.
id형식은 AR-20160421-000001와 같이 만들기 위해 lpad도 추가해주었습니다.
ArticleService에서 writeNewArticle이 실행되는 문장을 넣어주고 ArticleServiceImpl에 실행구문을 추가해주는 것은
이전 게시글에 있습니다.
'Back-end > Spring' 카테고리의 다른 글
[HTML5] WebSocket을 이용한 채팅 만들기 (0) | 2016.04.22 |
---|---|
[HTML5] 웹소켓( WebSockat ) (2) | 2016.04.22 |
[Spring] 게시판 만들기 기본 (2) | 2016.04.21 |
[Spring] Query ( choose, when, if, where, foreach ) (0) | 2016.04.20 |
[Spring] Insert, Select, 실습 (0) | 2016.04.20 |