Maven + EclipseLink实现的简单JPA例程

1. 使用maven创建一个jpa的测试工程

<textarea cols="50" rows="15" name="code" class="python">mvn archetype:create -DgroupId=myjpa -DartifactId=myjpa</textarea> 

 

2. 添加jpa所依赖的包

<textarea cols="50" rows="15" name="code" class="xhtml"> &lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;configuration&gt; &lt;source&gt;1.5&lt;/source&gt; &lt;target&gt;1.5&lt;/target&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;EclipseLink Repo&lt;/id&gt; &lt;url&gt;http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo &lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;commons-lang&lt;/groupId&gt; &lt;artifactId&gt;commons-lang&lt;/artifactId&gt; &lt;version&gt;2.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.eclipse.persistence&lt;/groupId&gt; &lt;artifactId&gt;javax.persistence&lt;/artifactId&gt; &lt;version&gt;2.0.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.eclipse.persistence&lt;/groupId&gt; &lt;artifactId&gt;eclipselink&lt;/artifactId&gt; &lt;version&gt;2.0.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;hsqldb&lt;/groupId&gt; &lt;artifactId&gt;hsqldb&lt;/artifactId&gt; &lt;version&gt;1.8.0.7&lt;/version&gt; &lt;/dependency&gt; &lt;dependencies&gt;</textarea> 

 

3. 创建两个model类

Customer.java

<textarea cols="50" rows="15" name="code" class="java">package myjpa.model; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity public class Customer implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.TABLE) private int id; private String name; private String email; @Temporal(TemporalType.DATE) private Date birthday; @OneToMany(mappedBy = "customer") private final List&lt;Address&gt; addresses = new ArrayList&lt;Address&gt;(); public int getId() { &lt;mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"&gt;&lt;/mce:script&gt;&lt;mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"&gt;&lt;/mce:script&gt;return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public List&lt;Address&gt; getAddresses() { return addresses; } public void addAddress(Address address) { this.addresses.add(address); address.setCustomer(this); } @Override public String toString() { return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this); } }</textarea> 

 

Address.java

<textarea cols="50" rows="15" name="code" class="java">package myjpa.model; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Address implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.TABLE) private int id; private String name; private String description; private String zipcode; @ManyToOne private Customer customer; 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; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } @ManyToOne public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } @Override public String toString() { return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this); } }</textarea> 

 

4. 配置persistence.xml文件

在工程的src/main/resources目录下创建META-INF目录,并在META-INF下创建persistence.xml文件,内容如下:

<textarea cols="50" rows="15" name="code" class="xhtml"> &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt; &lt;persistence-unit name="eclipselink"&gt; &lt;provider&gt;org.eclipse.persistence.jpa.PersistenceProvider&lt;/provider&gt; &lt;class&gt;myjpa.model.Customer&lt;/class&gt; &lt;class&gt;myjpa.model.Address&lt;/class&gt; &lt;properties&gt; &lt;property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" /&gt; &lt;property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:." /&gt; &lt;property name="javax.persistence.jdbc.user" value="sa" /&gt; &lt;property name="javax.persistence.jdbc.password" value="" /&gt; &lt;property name="eclipselink.ddl-generation" value="drop-and-create-tables" /&gt; &lt;property name="eclipselink.ddl-generation.output-mode" value="database" /&gt; &lt;/properties&gt; &lt;/persistence-unit&gt; &lt;/persistence&gt;</textarea> 

 

5. 编写测试类

<textarea cols="50" rows="15" name="code" class="java">package myjpa; import java.util.Calendar; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.TypedQuery; import myjpa.model.Address; import myjpa.model.Customer; public class Test { public static void main(String[] args) throws Exception { EntityManagerFactory factory = Persistence.createEntityManagerFactory("eclipselink"); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); for (int i = 0; i &lt; 10; i++) { Customer customer = new Customer(); customer.setName("customer" + i); customer.setEmail("customer" + i + "@my.com"); customer.setBirthday(Calendar.getInstance().getTime()); Address addressHome = new Address(); addressHome.setName("Home"); addressHome.setDescription("Home"); addressHome.setZipcode("123456"); em.persist(addressHome); Address addressOffice = new Address(); addressOffice.setName("Office"); addressOffice.setDescription("Office"); addressOffice.setZipcode("654321"); em.persist(addressOffice); customer.addAddress(addressHome); customer.addAddress(addressOffice); em.persist(customer); } em.getTransaction().commit(); em.close(); em = factory.createEntityManager(); TypedQuery&lt;Customer&gt; q = em.createQuery("select c from Customer c", Customer.class); List&lt;Customer&gt; customers = q.getResultList(); for(Customer c: customers) { System.out.println(c); } em.close(); } } </textarea> 

 

6. 运行测试类,JPA会自动创建所要使用的数据库和表,然后就会执行相应的添加和查询操作。

 

 

你可能感兴趣的:(Maven + EclipseLink实现的简单JPA例程)