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 구현 라이브러리를 권장합니다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...