본문 바로가기
Programming/Spring

[spring] iBatis 구현

by NAMP 2016. 4. 25.

[spring] iBatis 구현

서비스에서 ibatis 로 변경

    @Resource(name = "ibatis")
    private UserDAO dao;

mappers 패키지 생성

ibatis 용 map file 생성

usermapper_i.xml 파일 생성

생성된 코드

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap>
</sqlMap>

쿼리들을 XML 파일에 넣어야 한다.

insert into userinfo (userid, username, userpwd, email, phone,address) values (?, ?, ?,?,?,?)
select * from userinfo where userid=? and userpwd = ?
select * from userinfo where userid = ?
select * from userinfo
update userinfo set email=?,phone=?,address=? where  userid  = ?
delete from userinfo where  userid  = ?
select * from userinfo where username like  '%'||?||'%'

<insert> 태그로 감싼다.

    <insert id="">
        insert into userinfo (userid, username, userpwd, email, phone,address)
        values (?, ?, ?,?,?,?)
    </insert>

구문에 맞는 태그로 감싼다.

    <insert id="">
        insert into userinfo (userid, username, userpwd,
        email, phone,address)
        values (?, ?, ?,?,?,?)
    </insert>
    
    <select id="">
        select * from userinfo where userid=? and userpwd = ?
    </select>
    
    <select id="">
        select * from userinfo where userid = ?
    </select>

    <select id="">
        select * from userinfo
    </select>
    
    <update id="">
        update userinfo set email=?,phone=?,address=? where
        userid = ?
    </update>
    
    <delete id="">
        delete from userinfo where userid = ?
    </delete>
    
    <select id="">
        select * from userinfo where username like
        '%'||?||'%'
    </select>

iBatis 에서 처리할 수 있는 구조로 변경한다.

구분을 위한 id 를 부여한다.

    <select id="login">
        select * from userinfo where userid=? and userpwd = ?
    </select>

두개 이상의 데이터를 받을 때에는 객체화 해야 한다.
결과를 UserVO에 담는다.

<select id="login" parameterClass="user.vo.UserVO" resultClass="user.vo.UserVO">
    select * from userinfo where userid=? and userpwd = ?
</select>

typeAlias 사용도 가능하다.

<typeAlias alias="u" type="user.vo.UserVO"/>

파라미터가 하나면 객체화 하지 않아도 된다.

파리미터 클래스를 hashMap으로 정의

    <select id="search" parameterClass="hashMap" resultClass="user.vo.UserVO">
        select * from userinfo        
        where username like    '%'||?||'%'
    </select>

? 에 값을 세팅한다.

UserVO 객체에 정보가 담겨져서 온다.
UserVO 안에 있는 userid, username 등을 꺼낸다.

변수 바이딩을 한다.

<insert id="add" parameterClass="user.vo.UserVO">
    insert into userinfo (userid, username, userpwd,
    email, phone,address) 
values (#userid#, #username#, #userpwd#, #email#, #phone#, #address#)
</insert>

넘겨주는 파라미터가 하나면 아무 이름이나 상관없다. call by value 가 된다. 로컬 변수처럼 받는다.

<select id="getuser" resultClass="user.vo.UserVO">
    select * from userinfo where userid = #userid#
</select>

isNotNull을 사용하여 동적 sql 구문 사용

<select id="search" parameterClass="hashMap" resultClass="user.vo.UserVO">
    select * from userinfo
    <isNotNull prepend="where" property="userid">
        userid like '%'||#userid#||'%'
    </isNotNull>
    <isNotNull prepend="where" property="username">
        username like '%'||#username#||'%'
    </isNotNull>
    <isNotNull prepend="where" property="email">
        email like '%'||#email#||'%'
    </isNotNull>
</select>

sqlMapConfig 파일 생성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
<sqlMapConfig>
</sqlMapConfig>

applicationContext.xml 수정

<!-- iBatis 환경 구동 -->
<bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocations" value="classpath:ibatis_config.xml"></property>
</bean>

configuration 파일을 읽어들인다.

ibatis 에서 네임스페이스는 옵션
MyBatis 에서는 네임스페이스를 무조건 사용해야 한다.

API를 보면서 사용한다.

@Autowired
SqlMapClient sqlMapClient;

ibatis 사용을 위한 getUserList 메소드 구현

    @Override
    public List<UserVO> getUserList() {
        System.out.println("UserDAO_iBatis 연동");
        List<UserVO> list = null;
        try {
            list = sqlMapClient.queryForList("list");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return list;
    }

XML 문서 1라인에는 주석을 허용하지 않는다.

searchUser 구현

    @Override
    public List<UserVO> searchUser(String condition, String keyword) {
        System.out.println("UserDAO_iBatis 연동");
        List<UserVO> list = null;
        Map<String, String> map = new HashMap<String, String>();
        map.put(condition, keyword);
        try {
            list = sqlMapClient.queryForList("search", map);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return list;
    }

전달된 hashMap을 읽어서 처리한다.

    <select id="search" parameterClass="hashMap" resultClass="user.vo.UserVO">
        select * from userinfo
        <isNotNull prepend="where" property="userid">
            userid like '%'||#userid#||'%'
        </isNotNull>
        <isNotNull prepend="where" property="username">
            username like '%'||#username#||'%'
        </isNotNull>
        <isNotNull prepend="where" property="email">
            email like '%'||#email#||'%'
        </isNotNull>
    </select>

export 파일 : https://goo.gl/2QqIhe

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

[spring] MyBatis 구조 - Annotation 형태  (0) 2016.04.26
[spring] MyBatis 구현  (0) 2016.04.25
[spring] iBatis, MyBatis Framework 아키텍처  (0) 2016.04.24
[Spring] JDBC 설정  (0) 2016.04.24
[spring] 데이터 접근 디자인 패턴  (0) 2016.04.23

댓글