2011년 6월 20일 월요일

Easy java Persistence

EJP(Ease Java Persistence)는 관계형 데이터베이스 사용을 쉽게해주는 강력한 Java API 입니다.
EJP는 Mapping Annotation이나 XML Configuration이 필요 없으며, 특정 클래스를 상속 받거나 인터페이스를 구현할 필요가 없습니다.

하지만 “Automatic O-R Mapping” 이 부분을 생각 해보니 문제가 있을 수 있겠습니다.
EJP에서는 ORM(O-R Mapping)를 위해 Class명과 Table 명 사이, Method 명과 Tablet Column명 사이에 규칙을 지쳐야 하는데 Object의 “name”은 DB에서 “.*name.* 형태이어야 한다는 것 입니다. 그 외 Lazy Object Loading, 상속 관계에 있는 Object Query 등의 지원은 아쉽습니다.

한 가지 명심해야 할 것은 EJP는 JDBC 기반으로 만들어 졌으며,  JPA 구현 라이브러리가 아니며,  둘 사이는 아무런 관계가 없다는 것입니다.

지원하는 Databases
  • MySQL
  • DB2
  • Oracle
  • Derby
  • HSQL
  • PostgreSQL
  • H2


간단한 사용법

Database Connecting
dbm = new DatabaseManager("mydb", 5, "com.mysql.jdbc.Driver", "jdbc:mysql://localhost/mydb");

또는

dbm = new DatabaseManager("mydb", 5, "jndiPath");

POJO Class “Customer” 정의

public class Customer
 {
   String username;
   String firstName;
   List support;     //association
   List orders;      //association
   ...
   // getters/setters
   ...
 }


Loading a Customer
Customer customer = dbm.loadObject(new Customer("johnsmith"));

Loading all Customers
List<Customer> customers = dbm.loadObjects(new ArrayList<Customer>(), Customer.class);

Updating Customer
customer.setLastName("Smithman");
dbm.saveObject(customer);


내부적으로는 아래와 같은 Update SQL이 생성될 것 입니다.
update customers set last_name = 'SmithMan' where username = 'johnsmith';

Insert Customer
Customer customer = new Customer("Johnjones", "John", "Jones");
dbm.saveObject(customer);

Update와 Insert 모두 “saveObject”을 호출 합니다. EJP는 customer Object가 새로 생성된 것인지 변경된 것인지 알아서 판단해줍니다.

SQL 일부 사용
Customer customer = new Customer();

// find all customers where last name = Smith
customer.setLastName("Smith");
dbm.loadObject(customer);


dbm.loadObject(new Customer(), "where :lastName = ?", "Smith");

SQL 일부을 loadObject Method에서 사용하여  특정 Object을 쉽게 찾을 수 있습니다. 또한 “%”와 같은 Wiildcard도 사용이 가능합니다.
또한 Object Find 조건이 여러가지라면 아래와 같이 사용할 수도 있습니다.

customer.setFirstName("John");
customer.setLastName("Smith");


또는

dbm.loadObject(new Customer(), "where :firstName = ? and :lastName = ?", "John", "Smith");

Conclusion
EJP을 사용하기 위해서는 알아야 할 것은 명명규칙 뿐 다른 건 알 필요가 없습니다. 개발자를 충분히 편하고 게으르게 해줄 수 있을 것 같습니다. 하지만 보다 많은 것을 바란다면 JPA 구현 라이브러리를 권장합니다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...