Category Archives: 허접프로그래머

RHEL 5 AP 구매하였습니다

사용자 삽입 이미지
회사에서 Redhat Enterprise Linux 5 Advanced Platform 을 구매하였다. 미국에서 건너오는 놈이라 이제서야 받게 되었다.

하나의 머신에 여러 OS를 가동시킬수 있는 가상화(Virtualization)라던가 하나의 SAN Pool에 여러 서버를 물려 사용할수 있는 GFS(Global File System)같은것들이 내 관심을 끈다.

이번 리눅스 코리아에서도 레드햇 부스에 방문해 나의 매우큰 관심을 표명하고 싶었지만, 뭐랄까 레드햇코리아에서 엔지니어분이 나왔을줄 알았는데, 다들 기술적인 부분은 잘 모르시는 분들이 나와서 심도있는 이야기는 못하고 추상적인 설명만 듣다가 왔다. 하긴, 이자리는 기술 세미나 혹은 컨퍼런스가 아니라 단지 홍보용의 전시회이라는 것….

첫인상에서 가장 마음에 드는점을 꼽아 보자면, 매우 멋지게 변한 화면들..(붉은색에 RHEL로고 겁나 멋지다)과…

내가 싫어하는 GUI관련 모듈을 설치안하면 드디어 제대로 콘솔에서 부팅이 된다는것! RHEL 4까지만 해도 아무리 그놈이나 KDE를 안깔아도 로그인만큼은 그래픽 화면으로 나오던데 이점이 매우 마음에 들었다^^;;

미디어킷은 생각보다 작은 크기였다. JBOSS 버스카드도 귀엽군…어디 쓸사람 없으신가?-_-;

Spring ActiveRowMapper 사용하기

스프링의 멋진 기능들에 현혹되어있다 보면 딱 한가지 마음에 안드는것이 있다.

JDBCTemplate 클래스의 멋진기능에 흠집이라도 낼려고 작정한것 같다. 바로 SELECT시에 수많은 필드별로 값을 지정하는 RowMapper 클래스를 제작해야 한다.

이곳 저곳 구글링을 해봤지만, 달리 방법은 없는듯 하다. 하지만 무언가 풀려서는 안되는 괴물 탈옥수 처럼 스프링의 샌드박스에 잠들어있는 녀석이 있었다.

그 이름하여 바로 ActiveRowMapper !이녀석은 삽질한 소스코드를 한 한줄로 줄여버린다.

기존의 소스코드 :
[code]String query = “SELECT EMP_NAME, EMP_GRADE, EMP_DEPT, EMP_PHONE FROM EMPLOYEE”;

ParameterizedRowMapper<Employee> rowMapper = new ParameterizedRowMapper<Employee>() {

 public User mapRow(ResultSet rs, int rowNum) throws SQLException
 {
  Employee empoyee = new Employee();
   
  empoyee .setEmpName(rs.getString(“EMP_NAME”));
  empoyee .setEmpGrade(rs.getString(“EMP_GRADE”));
  empoyee .setEmpDept(rs.getString(“EMP_DEPT”));
  empoyee .setEmpPhone(rs.getString(“EMP_PHONE”));
   
  return empoyee;
 }
};
 
Employee empoyee = jdbcTemplate.queryForObject(query, rowMapper);[/code]

새로운 소스코드 :
[code]String query = “SELECT EMP_NAME, EMP_GRADE, EMP_DEPT, EMP_PHONE FROM EMPLOYEE”;

ActiveRowMapper rowMapper = new ActiveRowMapper(Employee.class);

Employee empoyee = jdbcTemplate.queryForObject(query, rowMapper);[/code]

어떤가? 매우 산뜻하게 바뀌었다. 하지만 이녀석이 정식 마엘스톰에 못올라가고 있는 이유가 있는듯 하다.

다이나믹 하지 못하다. 나름 문제점이 있는거 같다. 우선 하나 꼬집어 보자면, 관례상 DB의 필드명은 언더바가 들어가고 Java에서는 낙타등 표기법으로 표기한다.

즉 디비에는 필드명이 “EMP_NAME” 이지만 Java Bean에서는 “empName” 으로 지정해야 한다. 물론 String 형이겠죠.

Java 표준 규약에 따르면 “empName” 이라는 변수에 값을 세팅 하는 셋터의 이름은 “setEmpName”이다.

고로 ActiveRowMapper는 입력해야할 셋터를 찾아가기 위해 다음과 과정을 거친다.

1. 필드명 소문자화 : EMP_NAME → emp_name
2. 언더바를 기준으로 토큰화 : emp_name → [1] emp, [2] name
3. 나누어진 열을 병합(첫글자는 대문자로 변환) : [1] emp, [2] name → EmpName
4. 앞에 set을 붙임 : EmpName → setEmpName

고로 이것을 명심해야만 에러없는 ActiveRowMapper를 사용할수 있다.

디비 EMP_NAME == 자바 empName

끝으로 샌드박스에서 잠자고 있던 1.4 소스를 올린다.
1248502711.java