首先是META-INF目录下的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="1.0">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/test" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="root" />
</properties>
</persistence-unit>
</persistence>
然后是一个实体类。
package com.boco.jpa.domain;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name="JPA_STUDENT")
public class Student {
private Integer id;
private String name;
private Integer age;
private Date birthDate;
public Student() {
// TODO Auto-generated constructor stub
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
@Column(length=32)
public String getName() {
return name;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=5)
public Integer getAge() {
return age;
}
@Temporal(TemporalType.DATE)
public Date getBirthDate() {
return birthDate;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj instanceof Student) {
Student o = (Student) obj;
if(o.id == this.id) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
return this.getName().hashCode();
}
}
最后就是JPA核心CRUD的测试类。
package com.boco.jpa.test; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import com.boco.jpa.domain.Student;; public class JPACoreTest { private static EntityManagerFactory emf; private static Logger log; private EntityManager em; @BeforeClass public static void setUpBeforeClass() throws Exception { emf = Persistence.createEntityManagerFactory("test"); log = Logger.getRootLogger(); } @AfterClass public static void tearDownAfterClass() throws Exception { if(emf != null) { emf.close(); } } @Before public void setUp() throws Exception { em = emf.createEntityManager(); } @After public void tearDown() throws Exception { if(em != null) { em.close(); } } @Test public void testPersist() { em.getTransaction().begin(); for(int i=0; i <15; i ++) { Student s = new Student(); s.setAge(20+i); s.setBirthDate(new Date()); s.setName("zhang"+i); em.persist(s); } em.getTransaction().commit(); } @Test public void testGet() { Student s = em.find(Student.class, 2); log.info(s.getName()); } @Test public void testDel() { em.getTransaction().begin(); em.remove(em.getReference(Student.class, 8)); em.getTransaction().commit(); } @Test public void testUpdate() { em.getTransaction().begin(); Student s = em.getReference(Student.class, 9); s.setAge(110); em.merge(s); em.getTransaction().commit(); } @Test public void testFind() { String jql = "select s from Student s where s.name = ?1 and s.age >= :age"; Query query = em.createQuery(jql); query.setParameter(1, "zhang").setParameter("age", 20); List<?> list = query.getResultList(); for(Object o : list) { Student s = (Student) o; log.info(s.getId()); } } }