2015년 7월 22일 수요일

[mybatis-spring] batch insert

mybatis - spring with batch insert.

mybatis 사이트를 참고해서 batch insert 작업을 하였습니다.
그러나, 참고 사이트에서는 상세한 정보를 얻을 수 없어서 고생을 하였지요.
담에 할 때는 쉽게 되겠지요? ^^


-- [Reference Site]
mybatis introduction
mybatis-spring introduction

-- [spring config]
<bean id="normalSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:ibatis/sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>

<bean id="batchSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:ibatis/sqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>

<bean id="normalSqlSessionTemplate" name="normalSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="normalSqlSessionFactory" />
</bean>

<bean id="batchSqlSessionTemplate" name="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="batchSqlSessionFactory" />
<constructor-arg index="1" value="BATCH" />
</bean>


-- [ServiceImpl]
@Service
public class BatchServiceImpl implements BatchService {
@Autowired
BatchDao batchDao;

public int batchInsert (List<MyDomain> params) {
//List<MyDomain> myDomains = new ArrayList<MyDomain>();
List<MyDomain> myDomains = params;

for (int i = 0; i < 100; i++) {
MyDomain myDomain = new MyDomain();
myDomain.setProperty1(String.valueOf(i));
myDomain.setProperty1("Name");

myDomains.add(myDomain);
}
return batchDao.InsertCodes(myDomains);
}
}


-- [DAO]
public class BaseDao {
@Autowired
@Qualifier("normalSqlSessionTemplate") -- 일반 DAO 처리
SqlSessionTemplate normalSqlSessionTemplate;

@Autowired
@Qualifier("batchSqlSessionTemplate") -- 배치 DAO 처리
SqlSessionTemplate batchSqlSessionTemplate;

public SqlSession getSqlSession() {
return signSqlSessionTemplate;
}

public SqlSession getSqlBatchSession() {
return batchSqlSessionTemplate;
}
}
@Repository
public class BatchDao extends BaseDao {
public void InsertCodes (List<MyDomain> myDomains) {
for (MyDomain myDomain : myDomains) {
getSqlBatchSession().insert("insert_Batch", myDomain);
}
}
}


-- [Mapper]
<insert id="insert_Batch" parameterType="packagename.MyDomain">
<selectKey resultType="int" keyProperty="myKey" order="AFTER" >
select 1 from dual;
</selectKey>
INSERT /* insert_Batch */
INTO table_name
(
property_1
, property_2
)
VALUES
(
#{property_1}
, #{property_2}
)
</insert>
-- warning: If you do not have SekectKey Tag, an protocol violation error occurs.

댓글 없음:

댓글 쓰기