Akashic Records

Easy java Persistence 본문

오래된글/Java

Easy java Persistence

Andrew's Akashic Records 2018. 4. 7. 22:50
728x90

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

728x90

'오래된글 > Java' 카테고리의 다른 글

EJB CMP의 단점  (0) 2018.04.07
Scrolling Result Sets  (0) 2018.04.07
JDBC driver types  (0) 2018.04.07
객체 저장 : Storing Classes, Images and Other Large Objects  (0) 2018.04.07
What is the way of Direct Memory Access in Java?  (0) 2018.04.07
Comments