Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
1. 아래 소스를 참고하여 아래와 같은 폴더에 파일을 위치시킨다.
(maven으로 빌드하는 경우의 source파일및 resource파일 구조)
가. TestMain.java에서 sch.hist.insert를 호출하는 형태를 갖는다.
나. Mybatis의 트랜잭션은 Sch2Service.java의 SqlSession sqlSession2 = factory2.openSession(); 부터 시작되며
SqlSession은 반드시 close해줘야한다.
다. rollback()은 따로 해주지 않아도 되는가 보다(?)
-----소스폴더 구조----
src/main/java/TestMain.java
src/main/resource/Configuration.xml
src/main/resource/mariadb/db.properties
src/main/resource/mariadb/mapper/sch/SchHist_SQL.xml
-------Sch_SQL.xml의 일부분
<?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="sch.hist">
<insert id="insert" parameterType="com.gooper.icbms.sda.comm.sch.dto.SchHistDTO">
<![CDATA[
insert into thsda_sch_hist(task_group_id, task_id, start_time, task_class, task_expression, work_cnt, work_time, cuser)
values (#{task_group_id}, #{task_id}, #{start_time}, #{task_class}, #{task_expression}, #{work_cnt}, #{work_time}, #{cuser})
]]>
</insert>
<select id="updateFinishTime" parameterType="com.gooper.icbms.sda.comm.sch.dto.SchHistDTO">
<![CDATA[
update thsda_sch_hist set finish_time=#{finish_time}, work_result=#{work_result}, triple_file_name=#{triple_file_name}, triple_check_result=#{triple_check_result},
uuser = #{uuser}, udate = now()
where task_group_id = #{task_group_id} and task_id = #{task_id} and start_time = #{start_time}
]]>
</select>
</mapper>
------------TestMain.java(일부분임)
-------SchComm.java의 insertSchHist()부분
// schHist테이블에 데이타 insert
public int insertSchHist(String task_group_id, String task_id, int work_cnt, String start_time, String end_time)
throws Exception {
int updateCnt = 0;
SchHistDTO schHistDTO = new SchHistDTO();
schHistDTO.setTask_group_id(task_group_id);
schHistDTO.setTask_id(task_id);
schHistDTO.setStart_time(start_time);
schHistDTO.setTask_class("NONE");
schHistDTO.setTask_expression("NONE");
schHistDTO.setWork_cnt(work_cnt);
schHistDTO.setWork_time(end_time);
schHistDTO.setCuser(user_id);
schHistDTO.setUuser(user_id);
List<SchHistDTO> list = new ArrayList<SchHistDTO>();
Map<String, List<SchHistDTO>> updateSchHistMap = new HashMap<String, List<SchHistDTO>>();
list.add(schHistDTO);
updateSchHistMap.put("list", list);
try {
updateCnt = sch2Service.insertSchHist(updateSchHistMap);
// pass
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return updateCnt;
}
------------Sch2Service.java의 insertSchHist() 부분
// 아래문장은 클래스 변수에 지정해주고 반복 사용되도록 해도된다.
SqlSessionFactory factory = SqlMapConfig.getSqlSession();
// sch_hist메서드
public int insertSchHist(Map<String, List<SchHistDTO>> map) throws Exception {
int cnt = 0;
// mapper에 접근하기 위한 SqlSession
SqlSession sqlSession = factory.openSession();
SchHist2DAO schHist2DAO = new SchHist2DAO(sqlSession);
List<SchHistDTO> list = map.get("list");
for(int i = 0; i < list.size(); i++) {
SchHistDTO schHistDTO = (SchHistDTO)list.get(i);
try {
log.debug("insertSchHist() ......................... start ");
cnt = schHist2DAO.insert(schHistDTO);
sqlSession.commit();
log.debug("insertSchHist()......................... commit() ");
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
sqlSession.close();
log.debug("insertSchHist() ......................... close() ");
}
}
log.debug("insertSchHist() ......................... end ");
return cnt;
}
------Configuration.xml
<?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>
<!-- DB접속정보 값을 가지고 있는 파일 설정 -->
<properties resource="mariadb/db.properties" />
<!-- 별명 부여 -->
<!--
<typeAliases>
<typeAlias type="pack.business.DataDto" alias="dto"/>
</typeAliases>
-->
<!-- DB접속 정보 셋팅 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="poolMaximumActiveConnections" value="20"/>
<property name="poolMaximumIdleConnections" value="20"/>
<property name="poolMaximumCheckoutTime" value="20000"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingQuery" value="select 1"/>
<property name="poolPingConnectionsNotUsedFor" value="10000"/>
<property name="poolTimeToWait" value="15000"/>
</environment>
</environments>
<!-- mapper.xml 파일 설정 -->
<mappers>
<mapper resource="mariadb/mapper/DataMapper.xml" />
<mapper resource="mariadb/mapper/sch/Sch_SQL.xml" />
<mapper resource="mariadb/mapper/sch/Aggr_SQL.xml" />
<mapper resource="mariadb/mapper/sch/SchHist_SQL.xml" />
</mappers>
</configuration>
------DB정보를 가지고 있는 파일(설정파일)(db.properties)
driver=org.mariadb.jdbc.Driver
url=jdbc:mariadb://XXX.XXX.XXX.XXX:3306/sda
username=db명
password=db패스워드
------DB정보를 가지고 있는 클래스 파일(SqlMapConfig.java)
package com.gooper.icbms.sda.comm;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapConfig {
private static SqlSessionFactory sqlSession;
static {
String resource = "Configuration.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlSession = new SqlSessionFactoryBuilder().build(reader);
reader.close();
} catch (Exception e) {
System.out.println("SqlMapConfig 오류 : " + e);
}
}
public static SqlSessionFactory getSqlSession() {
return sqlSession;
}
}
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
9 | [springframework]Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Could not read resultset: unexpected end of stream, read 0 bytes from 4 오류 발생시 조치사항 | 2017.01.23 | 971 |
8 | mybatis와 spring을 org.apache.commons.dbcp2.BasicDataSource의 DataSource로 연동할때 DB설정(참고) | 2016.10.31 | 1147 |
7 | Caused by: java.sql.SQLNonTransientConnectionException: Could not read resultset: unexpected end of stream, read 0 bytes from 4 오류시 확인/조치할 내용 | 2016.10.31 | 4225 |
6 | DBCP Datasource(org.apache.commons.dbcp.BasicDataSource) 설정 및 속성 설명 | 2016.09.26 | 937 |
» | [Mybatis]Spring과 연동하지 않고 Java+Mybatis 형태의 프로그램 샘플소스 | 2016.09.01 | 1008 |
4 | 초기 오류(java.lang.NoSuchMethodError)에 따른 후속 작업에서 오류(java.lang.NoClassDefFoundError)가 발생되는 상황(quartz에서 주기적으로 작업시) | 2016.08.29 | 738 |
3 | 마이바티스(MyBatis)쿼리로그 출력및 정렬하기 | 2015.12.01 | 1606 |
2 | mybais #과 $의 차이점 | 2015.11.10 | 819 |
1 | Mybatis foreach 문법정리(상황에 따른 사용법) | 2015.11.10 | 1776 |