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