본문 바로가기
JAVA/Spring

Spring - mybatis 연결

by 설총이 2018. 9. 10.

- Spring과 mybatis 연결하기위한 프로그램 다운


1. spring-orm(Spring Object/Relational Mapping)

이녀석은 반드시 기존에 설치했던 RELEASE 버전과 맞추어서 다운받아야함.

2. mybatis (최신버전 다운받아도됨)

3. mybatis-spring(최신버전 다운받아도됨)







[mybatis.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
<!-- 프로퍼티 파일로부터 데이터를 읽어온다. -->
<context:property-placeholder
    location="classpath:db.properties" />
 
<!-- 커넥션 풀을 만들기위한 과정. db.properties에 있는 값을 가져와 EL로 꺼냄 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="${jdbc.driver}" />
    <property name="jdbcUrl" value="${jdbc.url}" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>
    
<bean id="sqlSessionFactory"
    class="org.mybatis.spring.SqlSessionFactoryBean ">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:mybatis/*.xml" />
    <!-- value에다가 와일드카드를써서 여러개의 파일을 한번에 지정할 수 있다.
하위패키지에있는 모든 xml파일을 의미 -->
</bean>
 
    
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory" />
</bean>
cs



mapperLocations라는 이름으로 mybatis/*.xml을 설정.

mybatis 폴더 밑에있는 모든 xml 문서를 의미한다.





그중에 하나가 밑에있는 mapper.xml을 설정!!



[mapper.xml]



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<mapper namespace="myMem">
    <select id="selectAll" resultType="spring.mybatis.MemberDTO">
        select * from member
    </select>
 
    <insert id="insert" parameterType="spring.mybatis.MemberDTO">
        insert into member values
        (#{memberid},#{password},#{name},#{email})
    </insert>
 
    <update id="update" parameterType="spring.mybatis.MemberDTO">
        update member
        <set>
            <if test="password !=null">password = #{password},</if>
            <if test="name != null"> name = #{name},</if>
            <if test="email !=null"> email = #{email}</if>
        </set>
        where memberid = #{memberid}
    </update>
 
</mapper>
 
cs




이러한 selectAll , insert, update 라는 mapper 안에 생성을 한다음 DAO에서 호출한다.




[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
package spring.mybatis;
 
import java.util.List;
 
import org.mybatis.spring.support.SqlSessionDaoSupport;
 
public class MemberDAO extends SqlSessionDaoSupport{
 
//    SqlSession session;
//    
//    public void setSession(SqlSession session) {
//        this.session = session;
//    }
    
    
    public List<MemberDTO> selectAll(){
        List<MemberDTO> list = getSqlSession().selectList("myMem.selectAll");
        //함수안에는 namespace.id(빈아이디)로 들어가야한다.
        return list;
    }
    
    //생성자를 통한 insert문
    public void insert() {
        MemberDTO member = new MemberDTO("hello","java","7777","KH아카데미@naver.com");
        int i = getSqlSession().insert("myMem.insert",member);
        
//        if (i > 0) {
//            getSqlSession().commit();
//        } else {
//            getSqlSession().rollback();
//        }
//        getSqlSession().close();
//        return i;
//         getSqlSession()영역에서는 커밋 롤백을 할 필요가없다.
        
    }
    
    //setter를 통한 update문
    public int update() {
        MemberDTO member = new MemberDTO();
        member.setMemberid("scott");
        member.setName("바보");
        System.out.println("MemberDAO member : " + member);
        int i = getSqlSession().update("myMem.update",member);
        return i;
    }
    
}
 
cs





[Main.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
public class Main {
 
    public static void main(String[] ars) {
        ApplicationContext context = new GenericXmlApplicationContext("mybatis.xml");
 
        MemberDAO memberDAO = context.getBean("memberDAO", MemberDAO.class);
 
//        int a = memberDAO.insert();
//        int a = memberDAO.update();
 
//        if(a>0) {
//            System.out.println("업데이트 성공!");
//        }else {
//            System.out.println("업데이트 실패!");
//        }
 
        List<MemberDTO> list = memberDAO.selectAll();
 
        for (MemberDTO memberDTO : list) {
            System.out.println(memberDTO + "\n");
        }
 
    }
}
cs










cf) 만약에 같은 이름의 값이 두개의 파라미터 가 필요할땐 어떻게 해야할까



1
2
3
4
5
6
7
8
9
10
11
<update id="update" parameterType="spring.mybatis.MemberDTO">
    update member
    <set>
        <if test="memberid !=null">memberid = #{memberid},</if>
        <if test="password !=null">password = #{password},</if>
        <if test="name != null"> name = #{name},</if>
        <if test="email !=null"> email = #{email}</if>
    </set>
    where memberid = #{memberid}
</update>
 
cs



이상황에선 memberid값이 두개가 있어야하기때문에 여러개를 던질 수 있는 parameterType을 map으로 받고,

map 객체에다가 각각 다른 String key값으로 (memberid1, memberid2) 각각 #{ }으로 던진다.


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

Spring - Maven웹프로젝트 web.xml설정  (0) 2018.09.11
Spring MVC 설정  (0) 2018.09.11
Spring - JdbcDaoSupport  (0) 2018.09.10
Spring을 통한 jdbc연결  (0) 2018.09.10
Spring 예제 - 어노테이션 , @Aspect  (0) 2018.09.10