기본 콘텐츠로 건너뛰기

[JAVA][Interface 2일차]#3

Mybatis 데이터베이스 연동



이전 방법 - SQL 선언문, 커낵션 등등 선언해야 할 것이 많았음. -> Mybatis를 통해서 해결할 것임.


Mybatis template


Myspring 부분 리뷰


1
xmlns:tx="http://www.springframework.org/schema/tx
cs

트랜잭션 처리하는 부분 -> Myspring >


1
<tx:annotation-driven transaction-manager="txManager"/>
cs

트랜잭션을 어노테이션 기반으로 처리하겠다.


1
2
3
4
5
6
7
8
    <!-- 1. Database Setting -->
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
         <property name="url" value="jdbc:oracle:thin:@70.12.114.50:1521:xe"/>
         <property name="username" value="db"/>
         <property name="password" value="db"/>
     </bean>
 
cs

DB연결 부분. url 챙길 것.


1
2
3
4
5
    <!-- 2. Transaction Setting -->
     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"/>
     </bean>
 
cs

트랜잭션 처리. 위에 선언된 dataSource를 dataSource라는 이름으로 할당함.


1
2
3
4
5
    <!-- 3. MyBatis Setting -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="configLocation" value="classpath:com/mybatis/mybatis.xml"/>
     </bean>
cs

스프링과 Mybatis를 합친다.

<property name="configLocation" value="classpath:com/mybatis/mybatis.xml"/>

마이바티스의 환경설정. xml을 따로 설정한다. 프로젝트 기준 classpath는 src.

따라서 위치는 com.mybatis아래에 mybatis.xml을 만들어야한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.vo.User" alias="user"/>
        <typeAlias type="com.vo.Product" alias="product"/>
    </typeAliases>
    
    <mappers>
        <mapper resource="com/mybatis/usermapper.xml"/>
        <mapper resource="com/mybatis/productmapper.xml"/>
        <mapper resource="com/mybatis/searchmapper.xml"/>
    </mappers>
</configuration>
cs


마이바티스 내부

<typeAlias type="com.vo.User" alias="user"/>

com.vo.User를 user로 할당한다.

<mapper resource="com/mybatis/usermapper.xml"/>

SQL문서를 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
<?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.mapper.UserMapper">
    
    
    <insert id="insert" parameterType="user">
        INSERT INTO T_USER VALUES (#{id},#{pwd},#{name})    
    </insert>
    
    <update id="update" parameterType="user">
        UPDATE T_USER SET PWD=#{pwd},NAME=#{name} WHERE ID=#{id}
    </update>
    
    <delete id="delete" parameterType="String">
        DELETE FROM T_USER WHERE ID=#{obj}
    </delete>
    
    <select id="select" parameterType="String" 
    resultType="user">
        SELECT * FROM T_USER WHERE ID=#{obj}    
    </select>
    
    <select id="selectall" resultType="user">
        SELECT * FROM T_USER 
    </select>
    
</mapper>
cs

usermapper.xml.

SQL문은 알맞게 수정할 것. 

Q. 여기서 id는 .java의 펑션 네임을 가르키는 것인가? 그렇다면 이름이 같고, 인풋갯수가 다른(overload)의 경우엔 어떻게 할 것인가?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.mapper;
 
import java.util.ArrayList;
 
import com.vo.User;
 
public interface UserMapper {
    public void insert(User obj);
    public void delete(String obj);
    public void update(User obj);
    public User select(String obj);
    public ArrayList<User> selectall();
}
 
cs

Usermapper.java 스프링에서 마이바티스로 들어올때 위의 기능들을 사용한다. .java 와 .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
package com.component;
 
import java.util.ArrayList;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import com.frame.Dao;
import com.mapper.UserMapper;
import com.vo.User;
@Repository("userdao")
public class UserDao implements Dao<String, User> {
    @Autowired
    UserMapper um;
    
    @Override
    public void insert(User v) throws Exception{
        System.out.println("Inserted:"+v);
        um.insert(v);
    }
 
    @Override
    public void update(User v) throws Exception{
        um.update(v);
        System.out.println("Updated:"+v);
        
    }
 
    @Override
    public void delete(String k) throws Exception{
        System.out.println("Deleted:"+k);
        um.delete(k);
    }
 
    @Override
    public User select(String k) throws Exception{
        User user = um.select(k);
        return user;        
    }
 
    @Override
    public ArrayList<User> select() throws Exception{
        ArrayList<User> list = um.selectall();        
        return list;
    }
 
}
 
cs

UserDao 부분 세팅.


해결 못한부분. Search Range. -> 테이블을 조인해야 하는 것인가?




댓글