본문 바로가기
Web/Spring

Spring MVC Board(3)_MyBatis

by 미티치 2016. 5. 20.

MyBatis란?

 

MyBatis란 Java에서 관계형 데이터베이스 프로그래밍을 쉽게 할 수 있도록 하는 프레임워크이다. DB 프로그래밍을 위해 이전에 JDBC를 이용하여 게시판을 만들었었는데(Spring MVC Board), 이런 JDBC는 세부적인 작업이 가능하도록 작업 별로 다양한 메소드를 지원하는데, 이와 같이 많은 메소드의 호출은 개발자에게 부담이 된다. 따라서 MyBatis는 잘게 나누어져있는 JDBC에 비해 적은 메소드 호출 수로 개발을 좀 더 편하게하고, 여러 줄에 걸친 SQL을 쉽게 작성하기 위해 SQL을 자바코드에 정의하기 보다 XML에 정의해서 보기에도 편하고 수정하기에도 편한 환경을 제공하는 프레임워크이다.

 

 

 

■ MyBatis 환경설정

 

1. pom.xml에서 jar 파일 추가 ( pom.xml은 Java에서 import 같은 역할이라고 생각하면 된다 )

 : mybatis는 Maven이 알고있기 때문에 JDBC처럼 pom.xml에서 추가하고 직접 jar파일을 넣어주지 않고, 이렇게 pom.xml에서 추가만해줘도 Maven이 알아서 불러와준다. 따라서 밑에 코드만 추가하면됨! 



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
        <!-- JDBC Template -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
              
         <!-- JDBC설정 -->
        <dependency>   
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
 
        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
cs


 - pom.xml에 위의 코드를 추가해주는 방법 이외에도 Dependencies에서 추가해줄 수 있다.


Dependencies를 클릭하면 아래와 같은 화면이 뜬다.




Add 클릭, Group Id와 Artifact Id, Version 등 노란색 칠해져있는 칸만 채워주면 Search Result에 목록이 뜬다. 여기서 추가하고자 하는 라이브러리 선택하고 OK 하면 pom.xml에서 dependency에 코드가 자동추가된다. 아래에 추가된 라이브러리 결과를 보여줌




 


2. beans 생성

 : servlet-context.xml에 아래와 같은 코드 추가. datasource는 DB연결하기 위해 빈즈 생성하는 거고( Spring JDBC할때는 이 datasource를 ref 걸어서 template 빈즈 선언했었죠?) sqlSession와 sqlSessionFactory는 Mybatis를 연결해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <!-- DB연결하기 위해 있어야함 -->
    <beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
        <beans:property name="username" value="hr" />
        <beans:property name="password" value="orcl" />
    </beans:bean>
    
    <beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource"></beans:property>
    <beans:property name="mapperLocations" value="classpath:com/java/ex0520/dao/mapper/*.xml"></beans:property>
    </beans:bean>
    
    <beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
    </beans:bean>
    
cs

 

 


3. HomeController 클래스에 다음과 같은 코드를 추가한다. @Autowired는 메소드뿐만 아니라 아래처럼 필드에도 사용할 수 있다. 이렇게 선언된 sqlSession을 이용하여 우리가 생성할 Dao.xml에 접근할 것이다.

 

1
2
    @Autowired
    private SqlSession sqlSession;
cs

 



이렇게 되면 기본적인? 환경설정은 끝이났다. 이제 우리는 이전까지 class로 만들었던 Dao를 xml파일에 선언하여 사용할 것이다. 


MVC2 패턴은 폼에서 전송하는 데이터는 Command 객체에 담아 Controller로 전송한다. 하지만 이번 장에서 보여줄 예제에서는 MyBatis를 이용하여 코드가 얼마나 짧아지는지를 보여주기위해 Command 객체에서 처리해주는 부분을 Controller에 다 넣을것이다!!!!!!

 



♤ 예제


 




[ HomeController ]

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.javalec.springMVCBoard_Template;
 
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.session.SqlSession;
import org.aspectj.lang.annotation.AfterThrowing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.javalec.springMVCBoard_Template.dao.IDao;
 
@Controller
public class HomeController 
{
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    @Autowired
    private SqlSession sqlSession;
    
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }
    
    @RequestMapping("/list")
    public String list(Model model) 
    {
        System.out.println("list()");
        IDao dao = sqlSession.getMapper(IDao.class);
        model.addAttribute("list", dao.list());
        
        return "list";
    }
    
    @RequestMapping("/write_view")
    public String write_view(Model model) 
    {
        System.out.println("write_view()");
        return "write_view";
    }
    
    @RequestMapping("/write")
    public String write(HttpServletRequest request, Model model) 
    {
        System.out.println("write()");
        
        String bName = request.getParameter("bName");
        String bTitle = request.getParameter("bTitle");
        String bContent = request.getParameter("bContent");
        
        IDao dao = sqlSession.getMapper(IDao.class);
        dao.write(bName, bTitle, bContent);
        
        return "redirect:list";
    }
    
    @RequestMapping("/content_view")
    public String content_view(HttpServletRequest request, Model model)
    {
        System.out.println("content_view()");
        String bId = request.getParameter("bId");
        IDao dao = sqlSession.getMapper(IDao.class);
        model.addAttribute("content_view", dao.contentView(bId));        
        return "content_view";
    }
    
    @RequestMapping(value="/modify", method=RequestMethod.POST )
    public String modify(HttpServletRequest request, Model model)
    {
        System.out.println("modify()");
        
        String bId = request.getParameter("bId");
        String bName = request.getParameter("bName");
        String bTitle = request.getParameter("bTitle");
        String bContent = request.getParameter("bContent");
        
        IDao dao = sqlSession.getMapper(IDao.class);
        dao.modify(bId, bName, bTitle, bContent);
        
        return "redirect:list";
    }
    
    @RequestMapping("/reply_view")
    public String reply_view(HttpServletRequest request, Model model)
    {
        System.out.println("reply_view()");
        String bId = request.getParameter("bId");
        IDao dao = sqlSession.getMapper(IDao.class);
        model.addAttribute("reply_view", dao.reply_view(bId));
        return "reply_view";
    }
    
    @RequestMapping("/reply")
    public String reply(HttpServletRequest request, Model model) 
    {
        System.out.println("reply()");
        
        String bId = request.getParameter("bId");
        String bName = request.getParameter("bName");
        String bTitle = request.getParameter("bTitle");
        String bContent = request.getParameter("bContent");
        String bGroup = request.getParameter("bGroup");
        String bStep = request.getParameter("bStep");
        String bIndent = request.getParameter("bIndent");
        
        IDao dao = sqlSession.getMapper(IDao.class);
        dao.reply(bId, bName, bTitle, bContent, bGroup, bStep, bIndent);
        
        return "redirect:list";
    }
    
    @RequestMapping("/delete")
    public String delete(HttpServletRequest request, Model model) 
    {
        System.out.println("delete()");
        
        String bId = request.getParameter("bId");
        IDao dao = sqlSession.getMapper(IDao.class);
        dao.delete(bId);
        
        return "redirect:list";
    }
}
 
cs

 

 

 여기서 핵심은 dao.java에서 인터페이스를 정의하고 dao.xml에서 구현한다.

[ IDao.java ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.javalec.springMVCBoard_myBatis.dao;
 
import java.util.ArrayList;
 
import com.javalec.springMVCBoard_myBatis.dto.BDto;
 
public interface IDao 
{
    public void write(final String bName, final String bTitle, final String bContent);
    public ArrayList<BDto> list();
    public BDto contentView(String strID);
    public void modify(final String bId, final String bName, final String bTitle, final String bContent);
    public void delete(final String bId);
    public BDto reply_view(String str);
    public void reply(final String bId, final String bName, final String bTitle, final String bContent, final String bGroup, final String bStep, final String bIndent);
    public void replyShape(final String strGroup, final String strStep);
    public void upHit(final String bId) ;
}
cs



[ IDao.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
<?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.javalec.springMVCBoard_Template.dao.IDao">
    <insert id="write">
        INSERT INTO mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent) VALUES(mvc_board_seq.nextval, #{param1}, #{param2}, #{param3}, 0, mvc_board_seq.currval, 0, 0)
    </insert>
    
    <!-- select에는 resultType이 들어가야한다.  ->  resultSet이 왔는데 spring에선 클래스객체가 온다 왜? DI가 자동으로 되기때문에 -->
    <!-- 하지만 이 클래스 형식을 해석하지 못하기때문에 해석할 수 있는 형식으로 지정해줘야해. 이게 resultType -->
    <select id="list" resultType="com.javalec.springMVCBoard_Template.dto.BDto">
        SELECT * FROM mvc_board ORDER BY bGroup desc, bStep asc
    </select>
    
    <select id="contentView" resultType="com.javalec.springMVCBoard_Template.dto.BDto">
        SELECT * FROM mvc_board WHERE bId = #{param1}
    </select>
    
    <!-- result가 안넘어오니까 resultType이 필요가없음 -->
    <update id="modify">
        UPDATE mvc_board SET bName = #{param2}, bTitle = #{param3}, #bContent = #{param4} WHERE bId = #{param1}
    </update>
    
    <delete id="delete">
        DELETE FROM mvc_board WHERE bId = #{param1}
    </delete>
    
    <select id="reply_view" resultType="com.javalec.springMVCBoard_Template.dto.BDto">
        SELECT * FROM mvc_board WHERE bId = #{param1}
    </select>
    
    <insert id="reply">
        INSERT INTO mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent) VALUES (mvc_board_seq.nextval, #{param1}, #{param2}, #{param3}, #{param4}, #{param5}, #{param6}, #{param7})
    </insert>
    
    <update id="replyShape">
        UPDATE mvc_board SET bStep = bStep + 1 WHERE bGroup = #{param1} AND bStep > #{param2}
    </update>
    
    <update id="upHit">
        UPDATE mvc_board SET bHit = bHit + 1 WHERE bId = #{param1}
    </update>
</mapper>
 
cs



[ dto ]

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.javalec.springMVCBoard_myBatis.dto;
 
import java.sql.Timestamp;
 
public class BDto {
 
    int bId;
    String bName;
    String bTitle;
    String bContent;
    Timestamp bDate;
    int bHit;
    int bGroup;
    int bStep;
    int bIndent;
    
    public BDto() {
        // TODO Auto-generated constructor stub
    }
    
    public BDto(int bId, String bName, String bTitle, String bContent, Timestamp bDate, int bHit, int bGroup, int bStep, int bIndent) {
        // TODO Auto-generated constructor stub
        this.bId = bId;
        this.bName = bName;
        this.bTitle = bTitle;
        this.bContent = bContent;
        this.bDate = bDate;
        this.bHit = bHit;
        this.bGroup = bGroup;
        this.bStep = bStep;
        this.bIndent = bIndent;
    }
 
    public int getbId() {
        return bId;
    }
 
    public void setbId(int bId) {
        this.bId = bId;
    }
 
    public String getbName() {
        return bName;
    }
 
    public void setbName(String bName) {
        this.bName = bName;
    }
 
    public String getbTitle() {
        return bTitle;
    }
 
    public void setbTitle(String bTitle) {
        this.bTitle = bTitle;
    }
 
    public String getbContent() {
        return bContent;
    }
 
    public void setbContent(String bContent) {
        this.bContent = bContent;
    }
 
    public Timestamp getbDate() {
        return bDate;
    }
 
    public void setbDate(Timestamp bDate) {
        this.bDate = bDate;
    }
 
    public int getbHit() {
        return bHit;
    }
 
    public void setbHit(int bHit) {
        this.bHit = bHit;
    }
 
    public int getbGroup() {
        return bGroup;
    }
 
    public void setbGroup(int bGroup) {
        this.bGroup = bGroup;
    }
 
    public int getbStep() {
        return bStep;
    }
 
    public void setbStep(int bStep) {
        this.bStep = bStep;
    }
 
    public int getbIndent() {
        return bIndent;
    }
 
    public void setbIndent(int bIndent) {
        this.bIndent = bIndent;
    }
    
}
 
cs

 

 


위의 예제는 myBatis를 이용해서 게시판을 짠 예제입니다. 이전에 JDBC를 이용해서 만든 Spring기반 게시판과의 차이점이 보이시나요?

DAO를 myBatis를 이용해서 구현한 부분이 핵심입니다. 위에서는 우선적으로 Controller와 Command를 분리하지 않은 것을 코드가 얼마나 줄어드는지를 보여주기 위해서 구현했다고 설명했지만, 사실은 mvc2패턴을 처음 배울 때를 다시 생각해봅시다.

View와 Model과 Controller를 분리해서 구현한 것이 mvc2패턴이었죠. mvc2패턴에서 Command 객체는 Controller에서 구현해야할 부분들을 나눠놓은 것 뿐이었습니다. 따라서 이번 장에서 myBatis를 이용해서 구현한 부분에서는 이 Command 객체를 일부러 분리하지 않고 Controller에서 다 구현한 것입니다.

 

지금부터 보여줄 코드는 myBatis+Spring으로 구현한 웹 게시판입니다.

 


♤ 예제

 

 

 

[ HomeController.java ]

: HomeController는 처음 생성된 소스에서 수정하지 않았습니다.

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
package com.java.spring_test;
 
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
    
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }
    
}
 
cs

 

 

[ BoardController.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.java.spring_test.board;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import com.java.spring_test.dao.BoardDao;
 
@Controller
public class BoardController 
{
    private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
    
    @Autowired
    private SqlSession sqlSession;
    
    //게시판 리스트
    @RequestMapping("/BoardList")
    public String list(HttpServletRequest request, Model model){
        System.out.println("list()");
        
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        final int numPerPage = 10;
        int nowPage;
        if (request.getParameter("nowPage"== null) {
            nowPage = 1;
        } else {
            nowPage = Integer.parseInt(request.getParameter("nowPage"));
        }
        int minPage = 1;
        int startPage = (((int) ((double) nowPage / numPerPage + 0.9)) - 1* numPerPage + 1;
        int endPage;
        int maxPage = (int) ((double) ((int) dao.getListNum()) / numPerPage + 0.95);
        endPage = maxPage;
        if (endPage > startPage + 9 - 1) {
            endPage = startPage + 9 - 1;
        }
 
        System.out.println("minPage=" + minPage + " startPage=" + startPage + " endPage=" + endPage + " nowPage="+ nowPage + " maxPage=" + maxPage);
        System.out.println("rownum=" + ((nowPage - 1* 10 + 1+ ", " + ((nowPage - 1* 10 + 1 + 10 - 1));
        model.addAttribute("nowPage", nowPage);
        model.addAttribute("minPage", minPage);
        model.addAttribute("startPage", startPage);
        model.addAttribute("endPage", endPage);
        model.addAttribute("maxPage", maxPage);
        model.addAttribute("list", dao.list((nowPage - 1* 10 + 1, (nowPage - 1* 10 + 1 + 10 - 1));
        return "board/list";
    }
    
    /******************************************************************************************/
    //글 상세보기 
    @RequestMapping("/ContentView")
    public String content_view(HttpServletRequest request, Model model)
    {
        System.out.println("content_view()");
        int BOARD_NUM = Integer.parseInt(request.getParameter("BOARD_NUM"));
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        dao.upHit(BOARD_NUM);
        model.addAttribute("content", dao.contentView(BOARD_NUM));
        return "board/content";
    }
 
    /******************************************************************************************/
    //게시글 쓰는 페이지 보여주기 
    @RequestMapping("/WriteView")
    public String write_view(Model model){
        System.out.println("write_view");
        return "board/write";
    }
    
    //게시글 쓰기 Action
    @RequestMapping("/WriteAction")
    public String write(HttpServletRequest request, Model model){
        logger.info("wirteAct()");
        
        String BOARD_NAME = request.getSession().getAttribute("id").toString();
        String BOARD_TITLE = request.getParameter("BOARD_TITLE");
        String BOARD_CONTENT = request.getParameter("BOARD_CONTENT");
        //String BOARD_FILE = request.getParameter("BOARD_FILE");
        
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        dao.write(BOARD_NAME, BOARD_TITLE, BOARD_CONTENT, 0+"");
        
        return "redirect:BoardList";
    }
    /*************************************************************************************/
 
    //답변다는 페이지 보여주는 View
    @RequestMapping("/ReplyView")
    public String reply_view(HttpServletRequest request, Model model){
        System.out.println("reply_view()");
        int BOARD_NUM = Integer.parseInt(request.getParameter("BOARD_NUM"));
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        model.addAttribute("reply", dao.reply_view(BOARD_NUM));
        return "board/reply";
    }
    //답변다는 액션
    @RequestMapping("/ReplyAction")
    public String reply(HttpServletRequest request, Model model){
    
        System.out.println("replyAct()");
        String BOARD_NAME = request.getSession().getAttribute("id").toString();
        String BOARD_TITLE = request.getParameter("BOARD_TITLE");
        String BOARD_CONTENT = request.getParameter("BOARD_CONTENT");
        String BOARD_FILE = 0+""//request.getParameter("BOARD_FILE");
        int BOARD_GROUP = Integer.parseInt(request.getParameter("BOARD_GROUP"));
        int BOARD_STEP = Integer.parseInt(request.getParameter("BOARD_STEP"));
        int BOARD_INDENT = Integer.parseInt(request.getParameter("BOARD_INDENT"));
        
        System.out.println(BOARD_NAME+" ,"+BOARD_TITLE+", "+BOARD_CONTENT+", "+BOARD_FILE+", "+ BOARD_GROUP+", "+ BOARD_STEP+","+BOARD_INDENT);
    
        
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        dao.replyShape(BOARD_GROUP, BOARD_STEP);
        dao.reply(BOARD_NAME, BOARD_TITLE, BOARD_CONTENT, BOARD_FILE, BOARD_GROUP, (BOARD_STEP+1), (BOARD_INDENT+1));
        
        return "redirect:BoardList";
    }
 
 
    /*************************************************************************************/
    //글 수정 페이지
    @RequestMapping("/ModifyView")
    public String modifyView(HttpServletRequest request, Model model) {
        System.out.println("modifyView()");
        int BOARD_NUM = Integer.parseInt(request.getParameter("BOARD_NUM"));
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        model.addAttribute("content", dao.contentView(BOARD_NUM));
        return "board/modify";
    }
    
    //글 수정 Action
    @RequestMapping(value="/BoardModify", method=RequestMethod.POST )
    public String modify(HttpServletRequest request, Model model){
        System.out.println("modify()");
            
        int BOARD_NUM = Integer.parseInt(request.getParameter("BOARD_NUM"));
        String BOARD_TITLE = request.getParameter("BOARD_TITLE");
        String BOARD_CONTENT = request.getParameter("BOARD_CONTENT");
            
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        dao.modify(BOARD_NUM, BOARD_TITLE, BOARD_CONTENT);
            
        return "redirect:BoardList";
    }
    //게시글 삭제
    @RequestMapping("/BoardDelete")
    public String delete(HttpServletRequest request, Model model){
        System.out.println("delete()");
        int BOARD_NUM = Integer.parseInt(request.getParameter("BOARD_NUM"));
        BoardDao dao = sqlSession.getMapper(BoardDao.class);
        dao.delete(BOARD_NUM);
        
        return "redirect:BoardList";
    }
}
 
cs

 

 

[ BoardDto.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
package com.java.spring_test.board.dto;
 
import java.sql.Date;
 
public class BoardDto {
    private int BOARD_NUM;            //글 번호 -> Primary Key 처럼 사용할듯
    private String BOARD_NAME;        //글쓴이
    private Date BOARD_DATE;            //글 쓴 날짜
    private String BOARD_TITLE;        //글 제목
    private String BOARD_CONTENT;    //글 내용
    private String BOARD_FILE;            //파일 업로드
    private int BOARD_GROUP;            //답글과 글은 같은 그룹번호를 공유한다
    private int BOARD_STEP;            //답글의 번호
    private int BOARD_INDENT;        //답글의 답글인지 답글의 답글인지 볼 수 있는 들여쓰기 정도
    private int BOARD_HIT;                //조회 수
    
    public int getBOARD_NUM() {
        return BOARD_NUM;
    }
    public void setBOARD_NUM(int bOARD_NUM) {
        BOARD_NUM = bOARD_NUM;
    }
    public String getBOARD_NAME() {
        return BOARD_NAME;
    }
    public void setBOARD_NAME(String bOARD_NAME) {
        BOARD_NAME = bOARD_NAME;
    }
    public Date getBOARD_DATE() {
        return BOARD_DATE;
    }
    public void setBOARD_DATE(Date bOARD_DATE) {
        BOARD_DATE = bOARD_DATE;
    }
    public String getBOARD_TITLE() {
        return BOARD_TITLE;
    }
    public void setBOARD_TITLE(String bOARD_TITLE) {
        BOARD_TITLE = bOARD_TITLE;
    }
    public String getBOARD_CONTENT() {
        return BOARD_CONTENT;
    }
    public void setBOARD_CONTENT(String bOARD_CONTENT) {
        BOARD_CONTENT = bOARD_CONTENT;
    }
    public String getBOARD_FILE() {
        return BOARD_FILE;
    }
    public void setBOARD_FILE(String bOARD_FILE) {
        BOARD_FILE = bOARD_FILE;
    }
    public int getBOARD_GROUP() {
        return BOARD_GROUP;
    }
    public void setBOARD_GROUP(int bOARD_GROUP) {
        BOARD_GROUP = bOARD_GROUP;
    }
    public int getBOARD_STEP() {
        return BOARD_STEP;
    }
    public void setBOARD_STEP(int bOARD_STEP) {
        BOARD_STEP = bOARD_STEP;
    }
    public int getBOARD_INDENT() {
        return BOARD_INDENT;
    }
    public void setBOARD_INDENT(int bOARD_INDENT) {
        BOARD_INDENT = bOARD_INDENT;
    }
    public int getBOARD_HIT() {
        return BOARD_HIT;
    }
    public void setBOARD_HIT(int bOARD_HIT) {
        BOARD_HIT = bOARD_HIT;
    }
 
    
}
cs

 

 

[ BoardDao.java ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.java.spring_test.dao;
 
import java.util.ArrayList;
 
import com.java.spring_test.board.dto.BoardDto;
 
public interface BoardDao 
{
    public void write(final String BOARD_NAME, final String BOARD_TITLE, final String BOARD_CONTENT, final String BOARD_FILE);
    public ArrayList<BoardDto> list(int startList, int endList);
    public Integer getListNum();
    public BoardDto contentView(int BOARD_NUM);
    public void modify(int BOARD_NUM, final String BOARD_TITLE, final String BOARD_CONTENT);
    public void delete(final int BOARD_NUM);
    public BoardDto reply_view(final int BOARD_NUM);
    public void reply(final String BOARD_NAME,final String BOARD_TITLE, final String BOARD_CONTENT, final String BOARD_FILE , final int BOARD_GROUP, final int BOARD_STEP, final int BOARD_INDENT);
    public void replyShape(int BOARD_GROUP, int BOARD_STEP);
    public void upHit(final int BOARD_NUM) ;
 
}
cs

 

 

[ MemberDao.java ]

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.java.spring_test.dao;
 
import java.util.ArrayList;
 
import com.java.spring_test.member.dto.MemberDto;
 
public interface MemberDao {
    public void join(final String id, final String password, final String name, final String age, final String email);
    public MemberDto login(final String id);
    public ArrayList<MemberDto> memberList();
    public MemberDto memberDetail(final String id);
    public void memberDel(final String id);
}
cs

 

 

[ BoardDao.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
<?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.java.spring_test.dao.BoardDao">
    <insert id="write">
        INSERT INTO BOARD_MIJIN (BOARD_NUM, BOARD_NAME, BOARD_DATE, BOARD_TITLE, BOARD_CONTENT, BOARD_FILE, BOARD_GROUP, BOARD_STEP, BOARD_INDENT, BOARD_HIT) VALUES(BOARD_SEQ.nextval, #{param1}, sysdate ,#{param2}, #{param3}, #{param4}, BOARD_SEQ.currval, 0, 0, 0)
    </insert>
    
    <select id="list" resultType="com.java.spring_test.board.dto.BoardDto">
        SELECT * FROM (SELECT rownum rnum, BOARD_NUM, BOARD_NAME, BOARD_DATE, BOARD_TITLE, BOARD_CONTENT, BOARD_FILE, BOARD_GROUP, BOARD_STEP, BOARD_INDENT, BOARD_HIT FROM (SELECT * FROM BOARD_MIJIN ORDER BY BOARD_GROUP , BOARD_STEP ASC)) WHERE #{param1} <=rnum  AND rnum<=#{param2}        
    </select>
    
    <!-- 리스트의 총 개수 받아오는거 (총 페이지 수 구할때 사용) -->
    <select id="getListNum" resultType="java.lang.Integer">
        SELECT count(*) FROM BOARD_MIJIN
    </select>
    
    <select id="contentView" resultType="com.java.spring_test.board.dto.BoardDto">
        SELECT * FROM BOARD_MIJIN WHERE BOARD_NUM = #{param1}
    </select>
    
    <!-- result가 안넘어오니까 resultType이 필요가없음 -->
    <update id="modify">
        UPDATE BOARD_MIJIN SET BOARD_TITLE = #{param2}, BOARD_CONTENT = #{param3} WHERE BOARD_NUM = #{param1}
    </update>
 
    <delete id="delete">
        DELETE FROM BOARD_MIJIN WHERE BOARD_NUM = #{param1}
    </delete>
 
    <select id="reply_view" resultType="com.java.spring_test.board.dto.BoardDto">
        SELECT * FROM BOARD_MIJIN WHERE BOARD_NUM = #{param1}
    </select>
 
    <insert id="reply">
        INSERT INTO BOARD_MIJIN (BOARD_NUM, BOARD_NAME, BOARD_DATE, BOARD_TITLE, BOARD_CONTENT, BOARD_FILE, BOARD_GROUP, BOARD_STEP, BOARD_INDENT, BOARD_HIT) VALUES (BOARD_SEQ.nextval, #{param1}, sysdate, #{param2}, #{param3}, #{param4}, #{param5}, #{param6}, #{param7}, 0) 
    </insert>
 
    <update id="replyShape">
        UPDATE BOARD_MIJIN SET BOARD_STEP = BOARD_STEP + 1 WHERE BOARD_GROUP =#{param1} AND BOARD_STEP > #{param2}
    </update>
 
    <update id="upHit">
        UPDATE BOARD_MIJIN SET BOARD_HIT = BOARD_HIT + 1 WHERE BOARD_NUM = #{param1}
    </update>
</mapper>
 
cs

 

 

[ MemberDao.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
<?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.java.spring_test.dao.MemberDao">
    <insert id="join">
        INSERT INTO MEMBER_MIJIN VALUES( #{param1}, #{param2}, #{param3}, #{param4}, #{param5} )
    </insert>
    
    <select id="login" resultType="com.java.spring_test.member.dto.MemberDto">
        SELECT * FROM MEMBER_MIJIN where MEMBER_ID= #{param1}
    </select>
    
    <select id="memberList" resultType="com.java.spring_test.member.dto.MemberDto">
        SELECT * FROM MEMBER_MIJIN
    </select>
    
    <select id="memberDetail" resultType="com.java.spring_test.member.dto.MemberDto">
        SELECT * FROM MEMBER_MIJIN where MEMBER_ID= #{param1}
    </select>
    
    <delete id="memberDel">
        DELETE FROM MEMBER_MIJIN where MEMBER_ID=#{param1}
    </delete>
 
</mapper>
cs

 

 

[ 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.java.spring_test.member;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.java.spring_test.board.BoardController;
import com.java.spring_test.dao.MemberDao;
import com.java.spring_test.member.dto.MemberDto;
 
@Controller
public class MemberController {
    
    private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
    
    @Autowired
    private SqlSession sqlSession;
    
    /*********************************************************************************/
    //로그인 폼 view
    @RequestMapping("/LoginView")
    public String loginView(){
        return "member/member_login";
    }
    //로그인 처리
    @RequestMapping("/LoginAction")
    public String loginAction(HttpServletRequest request){
        String id= request.getParameter("id");
        String password = request.getParameter("password");
        
        MemberDao dao = sqlSession.getMapper(MemberDao.class);
    
        try
            //dao 수행해서 가지고 온 객체의 password가 일치하면
            if( dao.login(id).getMEMBER_PASS().equals(password)){
                HttpSession session = request.getSession();
                session.setAttribute("id", id);
                return "home";
            }
        }catch(NullPointerException e){
            e.printStackTrace();
        }
            //로그인 실패하면 다시 로그인 폼으로 가기
            return "redirect:LoginView";
 
    }
    
    /*********************************************************************************/
    //회원가입 페이지 view
    @RequestMapping("/JoinView")
    public String joinView(){
        return "member/member_join";
    }
    //회원가입 처리
    @RequestMapping("/JoinAction")
    public String joinAction(HttpServletRequest request, Model model){
        String id = request.getParameter("id");
        String password = request.getParameter("password");
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        String email = request.getParameter("email");
        
        MemberDao dao = sqlSession.getMapper(MemberDao.class);
        dao.join(id, password, name, age, email);
        return "home";
    }
    
    /*********************************************************************************/
    //회원정보 관리 -> admin계정에서 회원전체 리스트 보기
    @RequestMapping("/MemberList")
    public String memberList(HttpServletRequest request, Model model){
        MemberDao dao = sqlSession.getMapper(MemberDao.class);
        model.addAttribute("memberList", dao.memberList());
        
        return "member/manage_list";
    }
    //회원의 상세정보 페이지
    @RequestMapping("/MemberDetail")
    public String memberDetail(HttpServletRequest request, Model model){
        String id = request.getParameter("id");
        MemberDao dao = sqlSession.getMapper(MemberDao.class);
        model.addAttribute("member", dao.memberDetail(id));
        return "member/manage_info";
    }
    //회원 삭제 Action
    @RequestMapping("/MemberDelete")
    public String memberDelete(HttpServletRequest request){
        String id = request.getParameter("id");
        MemberDao dao = sqlSession.getMapper(MemberDao.class);
        dao.memberDel(id);
        return "redirect:MemberList";
    }
}
cs

 

 

[ MemberDto.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
package com.java.spring_test.member.dto;
 
import java.sql.Date;
 
public class MemberDto {
 
        private String MEMBER_ID;
        private String MEMBER_PASS;
        private String MEMBER_NAME;
        private String MEMBER_AGE;
        private String MEMBER_MAIL;
        
        public String getMEMBER_ID() {
            return MEMBER_ID;
        }
        public void setMEMBER_ID(String mEMBER_ID) {
            MEMBER_ID = mEMBER_ID;
        }
        public String getMEMBER_PASS() {
            return MEMBER_PASS;
        }
        public void setMEMBER_PASS(String mEMBER_PASS) {
            MEMBER_PASS = mEMBER_PASS;
        }
        public String getMEMBER_NAME() {
            return MEMBER_NAME;
        }
        public void setMEMBER_NAME(String mEMBER_NAME) {
            MEMBER_NAME = mEMBER_NAME;
        }
        public String getMEMBER_AGE() {
            return MEMBER_AGE;
        }
        public void setMEMBER_AGE(String mEMBER_AGE) {
            MEMBER_AGE = mEMBER_AGE;
        }
        public String getMEMBER_MAIL() {
            return MEMBER_MAIL;
        }
        public void setMEMBER_MAIL(String mEMBER_MAIL) {
            MEMBER_MAIL = mEMBER_MAIL;
        }
        
        
}
cs


 

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

Spring MVC Board(2)_Spring JDBC  (0) 2016.05.19
Spring MVC Board (1)_Spring Board  (0) 2016.05.19
Spring MVC(3)_Annotation & @RequestMapping  (0) 2016.05.17
Spring MVC(2)  (0) 2016.05.16
Spring MVC(1)  (0) 2016.05.16