[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 |
댓글