JPA簡單測試文件

連接mysql數據庫的persistence.xml文件

<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="itcast"   >    
             <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
   <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/Mysqldb"/>
   <property name = "hibernate.connection.username" value = "root"/>
   <property name = "hibernate.connection.password" value = "123456"/>
      </properties>
   </persistence-unit>
</persistence>

 

Person.java類

package cn.itcast.bean;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="person")
public class Person {
    private Integer id;
    private String name;
    private Date birthday;
 private Gender gender=Gender.MAN;
 private String info;
 private Byte[] file;
 private String imagepath;
 
 /**不映射數據庫字段**/
 @Transient
 public String getImagepath() {
  return imagepath;
 }

 public void setImagepath(String imagepath) {
  this.imagepath = imagepath;
 }
   
 /**大字段,延時加載**/
 @Lob @Basic(fetch=FetchType.LAZY)
 public Byte[] getFile() {
  return file;
 }

 public void setFile(Byte[] file) {
  this.file = file;
 }

 @Lob
 public String getInfo() {
  return info;
 }

 public void setInfo(String info) {
  this.info = info;
 }

 /**枚舉**/
 @Enumerated(EnumType.STRING)@Column(length=5,nullable=false)
    public Gender getGender() {
  return gender;
 }

 public void setGender(Gender gender) {
  this.gender = gender;
 }
  
 /**日期**/
    @Temporal(TemporalType.DATE)
 public Date getBirthday() {
  return birthday;
 }

 public void setBirthday(Date birthday) {
  this.birthday = birthday;
 }

 public Person() {}
 
 public Person(String name) {
  this.name = name;
 }

    @Id @GeneratedValue
    public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 @Column(length=10,nullable=false,name="personName")
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
   
}
 

Gender類

package cn.itcast.bean;

public enum Gender {
  MAN,WOMEN
}
 

PersonTest測試類(junit4)

package junit.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.junit.BeforeClass;
import org.junit.Test;
import cn.itcast.bean.Person;

public class PersonTest {
 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
 }
   @Test public void save(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    em.persist(new Person("中文"));
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
  
   /**讀取數據不需要開事務,有數據更改動作(添、刪、改)時纔開啓事務**/
   @Test public void getPerson(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    Person person=em.find(Person.class,1);
    em.refresh(person);//若直接更改了數據庫中的數據,應該用refresh刷新一下數據庫的動態變化,保證輸出正確結果
    System.out.println(person.getName());   
    em.close();
    factory.close();       
   }
   @Test public void getPerson2(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    /**getReference方法返回一個代理對象,只有對該代理對象的屬性訪問時,纔會從數據庫中得到該條記錄(即發生數據的加載行爲)**/
    Person person=em.getReference(Person.class,1);
    /**若查找不到id爲1的記錄,會在對該代理對象的屬性訪問時,拋出異常。**/
    System.out.println(person.getName());
    em.close();
    factory.close();       
   }
  
   @Test public void updatePerson(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    Person person=em.find(Person.class,1);
    person.setName("老張");
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
  
   @Test public void updatePerson2(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    Person person=em.find(Person.class,1);
    em.clear();//將實體管理器中的所有實體變爲遊離狀態
    /**遊離狀態的實體無法更新字段**/
    person.setName("老陳");
    em.merge(person);//將遊離狀態的實體同步更新進數據庫中
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
   @Test public void deletePerson(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    Person person=em.find(Person.class,1);
    em.remove(person);
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
  
   /**JPQL語言**/
   @Test public void queryPerson(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    Query query=em.createQuery("select o from Person o where o.id=?1");
    query.setParameter(1, 1);
    //Person person=(Person)query.getSingleResult();
   // System.out.println(person.getName());
    List<Person> persons=query.getResultList();
    for(Person person:persons)
    {
     System.out.println(person.getName());    
    }
    em.close();
    factory.close();       
   }
  
   @Test public void delete(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    Query query=em.createQuery("delete from Person o where o.id=?1");
    query.setParameter(1,1);
    query.executeUpdate();
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
  
   @Test public void update(){   
    EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");
    EntityManager em=factory.createEntityManager();
    em.getTransaction().begin();
    Query query=em.createQuery("update  Person o set o.name=:name where o.id=:id");
    query.setParameter("name","xxx");
    query.setParameter("id",2);
    query.executeUpdate();
    em.getTransaction().commit();
    em.close();
    factory.close();       
   }
  

}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章