Spring으로 게시판 구현

2016. 12. 16. 17:26Programming/Spring


MyBatis 구성 요소


1) Mapper(SQL문 관리)

2) DAO(SqlSession으로 Mapper 호출)

3) 컨트롤러(DAO 실행 및 param/page 넘김)




1) Mapper(SQL문 관리)


<memberMapper.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
<?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.spring.mappers.MemberMappers">
 
<select id="selectAllMember" resultType="com.spring.vo.Member">
 <!-- CDATA: 내용이 태그가 아니라 문자열임을 parser에 알림  -->
<![CDATA[
          SELECT * FROM (
                    SELECT * FROM (
                              SELECT ROWNUM row_num, MEM.* FROM (
                                        SELECT * FROM MEMBER ORDER BY NUM DESC
                              )MEM
                    )PAGING_MEMBER WHERE row_num>=#{startNum}
          ) WHERE row_num<=#{endNum}
          ]]>
</select>
 
<select id="selectMaxNum" resultType="int">
          SELECT MAX(num) AS MAXNUM FROM MEMBER 
</select>
 
<select id="detailMember" resultType="com.spring.vo.Member">
          SELECT * FROM member where num = #{num}
</select>
 
<select id="selectId" resultType="com.spring.vo.Member">
          SELECT * FROM MEMBER WHERE id = #{id}
</select>
 
<select id="getAllCount" resultType="int">
          SELECT COUNT(*) as count FROM member
</select>
 
<select id="login" resultType="com.spring.vo.LoginVo">
          SELECT * FROM member where id=#{id} and pwd=#{pwd}
</select>
 
<delete id="deleteMember">
          DELETE FROM member where num= #{num}
</delete>
 
<insert id="insertMember">
          INSERT INTO MEMBER(num,id,pwd,name,email,phone,admin,indate)
 VALUES(#{num},#{id},#{pwd},#{name},#{email},#{phone},#{admin},sysdate)
</insert>
 
<update id="updateMember">
          UPDATE MEMBER SET pwd=#{pwd},name=#{name},email=#{email},
phone=#{phone},admin=#{admin} WHERE NUM=#{num}
</update>
 
</mapper>
 
cs



2) DAO(SqlSession으로 Mapper 호출)


<MemberDao.java>

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
package com.spring.dao;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.inject.Inject;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
 
import com.spring.vo.LoginVo;
import com.spring.vo.Member;
import com.spring.vo.Paging;
 
@Repository
public class MemberDao {
          private final static String MemberMapper = "com.spring.mappers.MemberMappers";
          @Inject
          SqlSession sqlSession;
          
          public List<Member> selectAllMember(Paging paging){
                    List<Member> list = 
sqlSession.selectList(MemberMapper+".selectAllMember",paging);
                    return list;
          }
          
          public int deleteMember(int num){
                    int delete = 0;
                    delete = sqlSession.delete(MemberMapper+".deleteMember",num);
                    return delete;
          }
          
          public Member detailMember(int num){
                    Member mem = sqlSession.selectOne(MemberMapper+".detailMember",num);
                    return mem;
          }
          
          public int updateMember(Member mem){
                    int update = 0;
                    update = sqlSession.update(MemberMapper+".updateMember",mem);
                    return update;
          }
 
          public int selectMaxNum() {
                    int maxNum = 0;
                    maxNum = sqlSession.selectOne(MemberMapper+".selectMaxNum");
                    return maxNum;
          }
 
          public boolean selectId(String id) {
                    boolean idFlag = false;
                    if(sqlSession.selectOne(MemberMapper+".selectId",id)!=null){
                              idFlag = true;
                    }
                    return idFlag;
          }
 
          public int insertMember(Member mem) {
                    int insert = 0;
                    insert = sqlSession.insert(MemberMapper+".insertMember",mem);
                    return insert;
          }
 
          public int getAllCount() {
                    int count = 0;
                    count = sqlSession.selectOne(MemberMapper+".getAllCount");
                    return count;
          }
          
          public LoginVo login(Member mem) {
                    LoginVo login = new LoginVo();
                    if(sqlSession.selectOne(MemberMapper+".login", mem)!=null){
                              login = sqlSession.selectOne(MemberMapper+".login", mem);
                              login.setLogin(1);
                    }else{
                              login.setLogin(0);
                    }
                    return login;
          }
}
 
cs



3) 컨트롤러(DAO 실행 및 param/page 넘김)



<MemberController.java>

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
@Controller
@RequestMapping("/member/*")
public class MemberController {
          private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
          
          @Inject
          MemberDao dao;
          SqlSession sqlSession;
          
          @RequestMapping("/list.do")
          public String list(Model model, Paging page){
                              logger.info("==================list.do start==============");
                              int count = dao.getAllCount();
                              page.setTotalCount(count);
                              List<Member> list = dao.selectAllMember(page);
                              model.addAttribute("memList",list);
                              model.addAttribute("paging", page);
                              logger.info("==================list.do end==============");
                    return "member/MemberList";
          }
          
          @RequestMapping("/delete.do")
          public String delete(int num){
                    //Spring에서 request 객체는 매개변수가 대신
                    int delete= 0;
                    delete = dao.deleteMember(num);
                    return "redirect:list.do?delete="+delete;
          }
          
          @RequestMapping(value="/updateForm.do", method=RequestMethod.GET)
          public String updateForm(int num, Model model){
                    Member mem = dao.detailMember(num);
                    model.addAttribute("mem",mem);
                    return "member/MemberUpdateForm";
          }
          
          @RequestMapping(value="/update.do", method=RequestMethod.POST)
          public String update(Member mem, Model model){
                    int update = 0;
                    update = dao.updateMember(mem);
                    String url = (update>0)?"list.do":"update.do";
                    model.addAttribute("update",update);
                    return "redirect:"+url;
          }
          
          @RequestMapping(value="/addForm.do", method=RequestMethod.GET)
          public String addForm(Model model){ 
                    //post 방식 호출 페이지는 새로고침 공격 막기 위해 꼭 redirect로 URL 변경해야
                    int maxNum = 0;
                    maxNum = dao.selectMaxNum();
                    model.addAttribute("maxNum", maxNum);
                    return "member/MemberAddForm";
          }
          
          @RequestMapping(value="/insert.do", method=RequestMethod.POST)
          public String insert(Member mem, Model model){
                    logger.info("==================insert.do post start==============");
                    logger.info(mem.toString());
                    int insert = 0;
                    int maxNum = 1;
                    boolean checkId = true;
                    checkId = dao.selectId(mem.getId());
                    if(!checkId){
                              maxNum = dao.selectMaxNum();
                              mem.setNum(maxNum+1);
                              logger.info(mem.toString());
                              insert = dao.insertMember(mem);
                    }
                    model.addAttribute("insert",insert);
                    model.addAttribute("checkId",checkId);
                    String url = (insert>0)?"list.do":"addForm.do";
                    logger.info("==================insert.do post end==============");
                    return "redirect:"+url;
          }
}
 
cs


'Programming > Spring' 카테고리의 다른 글

AJAX로 댓글 기능 구현  (0) 2016.12.23
스프링에서 AJAX 사용하기(+JSON)  (0) 2016.12.22
Interceptor, Cookie(+JSON)  (0) 2016.12.20
Spring JUnit(단위 테스트), MyBatis  (0) 2016.12.15
Spring 기본  (0) 2016.12.13