2008年5月2日

Apache OpenJPA

JSR 220 - Java Persistence API
Apache OpenJPA
commons-collections-3.2.jar
commons-lang-2.1.jar
commons-logging-1.0.4.jar
commons-pool-1.3.jar
geronimo-jpa_3.0_spec-1.0.jar
geronimo-jta_1.1_spec-1.1.jar
openjpa-1.0.2.jar
serp-1.13.1.jar
...

Apache Derby JDBC driver
derby.jar

--Create SQL
CREATE TABLE USR (ID INTEGER NOT NULL, NAME VARCHAR(255), PRIMARY KEY (ID))

--Entity - Usr.java

@javax.persistence.Entity
public class Usr {
@javax.persistence.Id
private int id;
private String name;
public Usr() {}
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}

--META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="OpenJPA" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>Usr</class>
<properties>
<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="openjpa.ConnectionURL" value="jdbc:derby:testdb;create=true" />
<property name="openjpa.ConnectionUserName" value="user" />
<property name="openjpa.ConnectionPassword" value="secret" />
<property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=INFO"/>
</properties>
</persistence-unit>
</persistence>

--Main class

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Main {
private static Log log = LogFactory.getLog(Main.class);

public static void main(String[] args) {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("OpenJPA");
try {
EntityManager em = emf.createEntityManager();
Usr user = new Usr();
user.setId(1);
user.setName("hello world");
em.getTransaction().begin();
try {
em.merge(user);
em.flush();
} finally {
em.getTransaction().commit();
}
log.info(em.find(Usr.class, 1).getName());
} finally {
emf.close();
}
}
}

/* Stdout
3594 OpenJPA TRACE [main] openjpa.jdbc.SQL - executing prepstmnt 3866500 SELECT t0.name FROM Usr t0 WHERE t0.id = ? [params=(int) 1]
3625 OpenJPA TRACE [main] openjpa.jdbc.SQL - [31 ms] spent
3641 OpenJPA TRACE [main] openjpa.jdbc.JDBC - [0 ms] close
3750 OpenJPA TRACE [main] openjpa.jdbc.SQL - executing prepstmnt 30587319 UPDATE Usr SET name = ? WHERE id = ? [params=(String) hello world, (int) 1]
3766 OpenJPA TRACE [main] openjpa.jdbc.SQL - [16 ms] spent
3782 OpenJPA TRACE [main] openjpa.jdbc.JDBC - [0 ms] commit
3782 OpenJPA TRACE [main] openjpa.jdbc.JDBC - [0 ms] close
... Main main
... hello world
*/

沒有留言:

網誌存檔