추천 블로그, 추천영상
최근에 생각을 정리할겸 블로그를 작성 하다 보니 다른분들도 보았으면 하는 내용들이 뒤로 밀려서 추천하는 블로그 내용을 따로 모아놓고 이 내용이 가장 처음에 보이게 하려고 합니다. Read More
Published on 2020-03-25 13:30 by macle
복잡한 쿼리가 필요 없을때가 많았고 불러온 이후에 java 객체로 변환하는 과정이 귀찮고, 단순쿼리를 짜는것도 귀찮아서 개발 하였습니다.
DB를 설계하기전에 아래처럼 도메인 헤드별 타입을 정의하고, 용어사전을 만들어서 사용하는 경우가 많았는데 당시에는 이러한 규칙이 잘 지켜지지 않으면 데이터 품질평가 점수가 좋지 않았습니다.
위 규칙을 적용한 테이블 형태
아래와 같은 java 형 기본형을 매핑 해주고 각 기호는 USER_ID 의 ID 처럼 뒤에 붙는 값 입니다.
/**
* @author macle
*/
public class NamingObjectMake {
public static void main(String [] args){
String tableName = "T_STOCK_ITEM";
System.out.println("@Table(name=\"" + tableName+ "\")\n");
System.out.println(JdbcNaming.makeObjectValue(tableName));
}
}
위와같은 형태의 코드를 사용하면
@PrimaryKey(seq = 1)
private String ITEM_CD;
private String ITEM_FULL_CD;
private String ITEM_NM;
private String ITEM_EN_NM;
private String MARKET_CD = "KOSPI" ;
private String CATEGORY_NM;
private String WICS_NM;
private String SUMMARY_DS;
@DateTime
private Long DELISTING_DT;
private String TRADE_FG = "Y" ;
private String LISTING_YMD;
private Long LISTING_CNT;
@DateTime
private Long REG_DT ;
@DateTime
private Long UPT_DT ;
위와같은 형태로 console에 생성되는데 필요한 컬럼만 복사하여 객체로 만들어서 사용하거나
package com.seomse.jdbc.example.objects;
import com.seomse.jdbc.connection.ApplicationConnectionPool;
import com.seomse.jdbc.objects.JdbcObjects;
/**
* @author macle
*/
public class ObjectMake {
public static void main(String[] args) {
//noinspection ResultOfMethodCallIgnored
String tableName = "T_STOCK_ITEM";
System.out.println(JdbcObjects.makeObjectValue(tableName));
}
}
위의 예제로
@PrimaryKey(seq = 1)
@Column(name = "ITEM_CD")
@Column(name = "ITEM_FULL_CD")
@Column(name = "ITEM_NM")
@Column(name = "ITEM_EN_NM")
@Column(name = "MARKET_CD")
@Column(name = "CATEGORY_NM")
@Column(name = "WICS_NM")
@Column(name = "SUMMARY_DS")
@DateTime
@Column(name = "DELISTING_DT")
@FlagBoolean
@Column(name = "TRADE_FG")
@Column(name = "LISTING_YMD")
@Column(name = "LISTING_CNT")
@DateTime
@Column(name = "REG_DT")
@DateTime
@Column(name = "UPT_DT")
위와 같이 어노테이션을 생성하여
@Table(name="T_STOCK_ITEM")
public class Item {
@PrimaryKey(seq = 1)
@Column(name = "ITEM_CD")
private String code;
@Column(name = "ITEM_NM")
private String name;
@Column(name = "ITEM_EN_NM")
private String englishName;
@Column(name = "MARKET_TP")
private MarketType marketType = MarketType.KOSPI;
}
위 형태의 객체를 만들어 사용하는 형태입니다.
//seomse-stock analysis module 의 일부
List<Item> stockItemList = JdbcObjects.getObjList(Item.class, "(DELISTING_DT < ? OR DELISTING_DT IS NULL) AND LISTING_YMD <= '" + ymd +"'", PrepareStatements.newTimeMap(time));
아래와 같이 다른 DB에서 데이터를 가져와서 이관하는 형태로 사용하기도 합니다.
JdbcNaming.insert(insertConn, JdbcNaming.getObjList(selectConn, Market5mNo.class, "YMDHM >= '" + ymdhm + "'"),true);
그박에도 com.seomse.jdbc.JdbcQuery 클래스에서
또한 DB시간과 시퀀스를 가져오는 부분은 com.seomse.jdbc.Database 에서 제공합니다.
connection 을 이용한 데이터 복사방식
/**
* @author macle
*/
public class RowDataCopy {
public static void main(String[] args) {
try{
Connection selectConn = ConnectionFactory.newConnection("oracle", "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "select", "select");
Connection insertConn = ConnectionFactory.newConnection("oracle", "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "insert", "insert");
String [] tables =
{"TABLE_NAME"}
;
RowDataInOut rowDataInOut = new RowDataInOut();
rowDataInOut.tableCopy(selectConn, insertConn,tables);
}catch(Exception e){
e.printStackTrace();
}
}
}
data file out
/**
* @author macle
*/
public class RowDataOut {
public static void main(String[] args) {
RowDataInOut dataInOut = new RowDataInOut();
dataInOut.dataOut();
}
}
data file in
/**
* @author macle
*/
public class RowDataIn {
public static void main(String[] args) {
RowDataInOut dataInOut = new RowDataInOut();
dataInOut.dataIn();
}
}
https://github.com/runonio/commons-jdk8
modules -> jdbc 에서 사용할 수 있습니다.
최근에 생각을 정리할겸 블로그를 작성 하다 보니 다른분들도 보았으면 하는 내용들이 뒤로 밀려서 추천하는 블로그 내용을 따로 모아놓고 이 내용이 가장 처음에 보이게 하려고 합니다. Read More
미국 10년물 창기채 입찰이 수요가 높아서 4.235%로 결정 되었는데도, 미국금리가 10년물 금리가 4.33%, 30년물 금리가 4.55%까지 상승 했습니다. Read More
12월 6일부터 12월 10일까지 한국 주식을 매입 했습니다. Read More