Spring

String Mybatis 연동 및 간단예제(select, insert)

닉넥임 2013. 10. 1. 09:38
반응형

 

 

MybatisTest.zip
다운로드

 

 

Spting + Mybatis를 할려고한다 why? 잘까먹어서..

내가적었지만 뭔소리인가 싶기도 하며 맞는지도 의심스럽다.. 더열심이 해야겠다. 

select, insert부분만 구현했다 why? 두개면 나머지도 다할수 있다!!

 

시작하기 먼저 간단하게 순서를 소개하자면

1. pom.xml  mybatis 를하기위한 dependency 추가

2. root-context.xml 에 추가

3. bean 파일인 Member.java 생성

4. 매핑하기위한 MemberMapper.interface 생성

5. MemberDAO.interface 와 DAO를 상속받은 MemberDAOService.java 생성

- 멤버DAO는 멤버Mapper와 내용은 같지만 Mapper만을 하기위한 인터페이스를 만드는 것이 좋다.

6. Service부분에서 값을 매핑한다 .

7. 컨트롤러 부분에서 값을 받아 화면으로 보내주면 화면 전환을 해준다.

 

이제 시작!! 설명은 주석으로 달려있다 천천이 보면 됨.

 

1. pom.xml 에다가 mybatis 사용하기위한 아래의 3개의 dependency를  추가한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    <!-- myBatis -->        
    <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.0.6</version>
 </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.0.2</version>
    </dependency>
    <!-- Spring -->
 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${org.springframework-version}</version>
 </dependency>
 

 

 

 

 




2. root-context.xml <beans> </beans>사이에다가 다음과 같은 내용을 추가한다. 

 

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
<!-- Mybatis를 사용하는 패키지 경로를 적어준다.  -->    
    <context:component-scan base-package="com.test.mybatis" />
    <!-- MyBatis -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
        <property name="driverClass" value="oracle.jdbc.OracleDriver" />
        <!-- 아래의 부분은 오라클 버전이나 계정에따라 다르게적는다. -->
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="java" />
        <property name="password" value="java" />
    </bean>
    
    <!-- 트랜잭션 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
 
    </bean>
 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 아래부분은 매핑할 xml파일이 있는 패키지경로를 설정한다. -->
        <property name="typeAliasesPackage" value="com.test.mybatis" />
        <property name="mapperLocations" value="classpath:com/test/mybatis/*.xml" />
    </bean>
 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

 

 

- pom.xml에서 메이븐을 추가 하였기에 root-context namespace탭에서 아래와 같이 이름뜬다 아래와같이 체크하여준다. 

 

 

 

 

 

 

 

 

 



3. Member.java 생성 (bean파일)

 

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
package com.test.mybatis;
 
public class Member {
    private String _name;
    private String _email;
    private String _phone;
    
    public String get_name() {
        return _name;
    }
 
    public void set_name(String _name) {
        this._name = _name;
    }
 
    public String get_email() {
        return _email;
    }
 
    public void set_email(String _email) {
        this._email = _email;
    }
 
    public String get_phone() {
        return _phone;
    }
 
    public void set_phone(String _phone) {
        this._phone = _phone;
    }
 
}//end of class
 
 
 
4. MemberMapper.interface 생성
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test.mybatis;
 
import java.util.ArrayList;
 
import com.test.mybatis.Member;
 
public interface MemberMapper {
    ArrayList<Member> getMembers();
    void insertMember(Member member);
    void updateMember(String name);
    void deleteMember(String name);
}
 
5. MemberMapper.xml 생성
- 위의 interface와 매핑한다.
 
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
<?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">
 //여기는 매핑할 MemberMapper.java의 풀패키지명을 적어준다
<mapper namespace="com.test.mybatis.MemberMapper">
 
    <resultMap type="Member" id="MemberResultMap">
        <result property="_name" column="NAME" />
        <result property="_email" column="EMAIL" />
        <result property="_phone" column="PHONE" />
    </resultMap>
 
    <!-- id의 경우에는 Mapper.java에 동일하게 사용해야된다. -->
    <select id="getMembers" resultMap="MemberResultMap">
        SELECT * FROM tab_mybatis
    </select>
    
    <!-- parameterType 에는 구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래명이나 별칭이 들어간다  -->
    <insert id="insertMember" parameterType="com.test.mybatis.Member" >
        INSERT INTO tab_mybatis values(#{_name},#{_email},#{_phone})
    </insert>
    
    <!-- update와 delete는 생략한다. -->
    <update id=""></update>
    
    <delete id="deleteMember" parameterType="com.test.mybatis.Member">
        DELTE tab_mybatis WHERE(name=#{_name})
    </delete>
 
</mapper>
 

 

6. MemerDAO.java

- MemerMapper와 내용은 같으나 DAO를 Mapper의 역활로서 함께 사용시 문제가 발생하기에 따로 구분하여 사용하는 것이 좋다!!! 중요하다!! 이거때문에 시간 많이 잡아 먹었다!

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test.mybatis;
 
import java.util.ArrayList;
 
public interface MemberDAO {
 
    public ArrayList<Member> getMembers();
    public void insertMember(Member member);
    public void updateMember(String name);
    public void deleteMember(String name);
 
}
 

 

 

7. MemberDAOService.java

- DAO를 상속받아 SqlSession을 사용하여 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
package com.test.mybatis;
 
import java.util.ArrayList;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 //Service 클래스를 Repository로 등록함으로서 빈(bean) 클래스로 사용하능하게한다. 
@Repository
public class MemberDAOService implements MemberDAO {
 
 //Autowired를 사용하여 sqlSession을 사용할수 있다.
    @Autowired
    private SqlSession sqlSession;
    
    @Override
    public ArrayList<Member> getMembers() {
        ArrayList<Member> result = new ArrayList<Member>();
        //sqlSession을 통하여 매핑한다.
             MemberMapper memberMapper = sqlSession.getMapper(MemberMapper.class);
        //getMember()의 메소드명과 mapper.mxl과 id는 동일해야한다.
        result = memberMapper.getMembers();
        
        return result;
    }
    @Override
    public void insertMember(Member member) {
        MemberMapper memberMapper = sqlSession.getMapper(MemberMapper.class);
        memberMapper.insertMember(member);
    }
 //아래부분은 코딩하다 말았음
    @Override
    public void updateMember(String name) {
    }
    @Override
    public void deleteMember(String name) {
        MemberMapper memberMapper = sqlSession.getMapper(MemberMapper.class);
        memberMapper.deleteMember(name);
    }
}
 

 

8. MybatisController

- 컨트롤러 부분으로서 DB로부터 가져온값을 view화면으로 보내어준다.

 

 

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
package com.test.controller;
 
import java.util.List;
import java.util.Locale;
 
import javax.servlet.http.HttpServletRequest;
 
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 org.springframework.web.servlet.ModelAndView;
 
import com.test.mybatis.Member;
import com.test.mybatis.MemberDAOService;
 
@Controller
public class MybatisController {
    
    @Autowired
    private MemberDAOService memberDAOService;
    
    private static final Logger logger = LoggerFactory.getLogger(MybatisController.class);
    
    
    //시작 메인화면.
    @RequestMapping("/main")
    public ModelAndView main(Locale locale, Model model) {
        logger.info("Welcome main.", locale);
 
        // view 화면인 main.jsp에 DB로부터 읽어온 데이터를 보여준다.
        ModelAndView result = new ModelAndView();
        //addObject view에 넘어가는 데이터
        List<Member> memberList = memberDAOService.getMembers();
        result.addObject("result", memberList);
        result.setViewName("main");
        return result;
    }
    
    //insert 버튼 클릭시 값을 가져와서 result.jsp로 화면전환 해준다.
    @RequestMapping(value ="/insert", method = RequestMethod.POST)
    public ModelAndView insert(HttpServletRequest request){
        
        // HttpServletRequest를 이용하여 main.jsp로부터 값을 가져온다 getParameter로는 id값을 가져옴.
        Member member = new Member();
        member.set_name((String) request.getParameter("name"));
        member.set_email((String) request.getParameter("email"));
        member.set_phone((String) request.getParameter("phone"));
        
        memberDAOService.insertMember(member);
        System.out.println("insert complet");
        
        //아래부분은 select값을 result.jsp파일에 보여주기 위해 또사용.
        ModelAndView result = new ModelAndView();
        List<Member> memberList = memberDAOService.getMembers();
        result.addObject("result", memberList);
        result.setViewName("result");
        return result;
    }
}
 
 
9. result.jsp 생성
- 읽어온 값 을 화면에 보여준다.
 
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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page import ="java.util.*,com.test.mybatis.*" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>결과창</title>
</head>
<body>
 
<table>
     <tr>
         <td width="50px" align="center">id</td>
         <td align="center">email</td>
         <td align="center">phone</td>
     </tr>
     <!-- result는 contoller의 addObject로 부터 가져온다. -->
     <c:forEach items="${result}" var="member">
         <tr>
             <td>${member._name}</td>
             <td>${member._email}</td>
             <td>${member._phone}</td>    
         </tr>
     </c:forEach>
 </table>
 
 </body>
 
</html>

 

 

 

10. DB

- 아래와같이 테이블을 형성하고 값을넣는다.

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create table tab_mybatis(
    name varchar2(10) primary key,
    email varchar2(100),
    phone varchar2(11)
);
 
insert into tab_mybatis 
values ('호랑이','thosit@naee.com','01044472343');
 
insert into tab_mybatis 
values ('말코임','qewdq@naee.com','1234654');
 
insert into tab_mybatis 
values ('커피임','thosit@naee.com','01044472343');
 
 
drop table tab_mybatis;
 
 
---
결과화면이다.

 

 

반응형

'Spring' 카테고리의 다른 글

Controller @ModelAttribute  (0) 2013.10.07
Controller @RequestParam  (1) 2013.10.07
web.xml  (0) 2013.09.25
Maven 정보(pom.xml) 모음  (0) 2013.09.05
ibatis, mybatis 가이드 이동국 pdf  (0) 2013.09.04