zoukankan      html  css  js  c++  java
  • JPA实例-转载

    具体例子

        完成工程后工程结构如下图:

        

     (注意:persistence.xml文件的位置决定持久性的根(Persistence Root)。持久性的根为JAR文件或者包含META-INF目录(前提是persistence.xml位于此)的目录。一般将这个persistence.xml文件放在src下的META-INF中。命名及位置都不能变)

    a)、导入相关jar包(见上图)和创建META-INF和persistence.xml文件.

    persistence.xml配置如下:(我用的数据为MySQL,采用不同数据库及JPA的不同实现版本会导致配置内容不同)

       

    [xhtml] view plain copy
     
    1. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
    2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_version=1">  
    4.     <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">  
    5.         <properties>  
    6.             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />  
    7.             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
    8.             <property name="hibernate.connection.username" value="root" />  
    9.             <property name="hibernate.connection.password" value="123456" />  
    10.             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1" />  
    11.             <property name="hibernate.max_fetch_depth" value="3" />  
    12.             <property name="hibernate.hbm2ddl.auto" value="update" />  
    13.         </properties>  
    14.     </persistence-unit>  
    15. </persistence>  

    b)、编写实体bean,如下:

       

    [c-sharp] view plain copy
     
    1. package com.hmk.bean;  
    2.   
    3. import javax.persistence.Column;  
    4. import javax.persistence.Entity;  
    5. import javax.persistence.GeneratedValue;  
    6. import javax.persistence.Id;  
    7.   
    8. @Entity  
    9. public class Person {  
    10.     private int id;  
    11.     private String name;  
    12.       
    13.     @Id @GeneratedValue  
    14.     public int getId() {  
    15.         return id;  
    16.     }  
    17.     public void setId(int id) {  
    18.         this.id = id;  
    19.     }  
    20.     @Column(length=12)  
    21.     public String getName() {  
    22.         return name;  
    23.     }  
    24.     public void setName(String name) {  
    25.         this.name = name;  
    26.     }  
    27.       
    28. }  

       

    c)、编写junit测试代码,如下:

      

        

    [java] view plain copy
     
    1. package junit.test;  
    2.   
    3.   
    4. import javax.persistence.EntityManager;  
    5. import javax.persistence.EntityManagerFactory;  
    6. import javax.persistence.Persistence;  
    7.   
    8. import org.junit.BeforeClass;  
    9. import org.junit.Test;  
    10.   
    11. import com.hmk.bean.Person;  
    12.   
    13. public class JpaTest {  
    14.   
    15.     @BeforeClass  
    16.     public static void setUpBeforeClass() throws Exception {  
    17.     }  
    18.       
    19.     @Test public void createTable(){  
    20.         //可以验证生成表是否正确  
    21.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    22.         factory.close();  
    23.     }  
    24.   
    25.     @Test public void save(){  
    26.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    27.         EntityManager em = factory.createEntityManager();  
    28.         em.getTransaction().begin();  
    29.         Person person = new Person(); //person为new状态  
    30.         person.setName("zhang san");  
    31.         em.persist(person); //持久化实体  
    32.         em.getTransaction().commit();  
    33.         em.close();  
    34.         factory.close();  
    35.     }  
    36.     //new 、托管、脱管、删除  
    37.       
    38.     @Test public void update(){  
    39.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    40.         EntityManager em = factory.createEntityManager();  
    41.         em.getTransaction().begin();  
    42.         Person person = em.find(Person.class, 1);  
    43.         person.setName("hmk"); //person为托管状态  
    44.         em.getTransaction().commit();  
    45.         em.close();  
    46.         factory.close();  
    47.     }  
    48.       
    49.     @Test public void update2(){  
    50.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    51.         EntityManager em = factory.createEntityManager();  
    52.         em.getTransaction().begin();  
    53.         Person person = em.find(Person.class, 1);  
    54.         em.clear(); //把实体管理器中的所有实体变为脱管状态  
    55.         person.setName("hmk2");  
    56.         em.merge(person); //把脱管状态变为托管状态,merge可以自动选择insert or update 数据  
    57.         em.getTransaction().commit();  
    58.         em.close();  
    59.         factory.close();  
    60.     }  
    61.   
    62.     @Test public void remove(){  
    63.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    64.         EntityManager em = factory.createEntityManager();  
    65.         em.getTransaction().begin();  
    66.         Person person = em.find(Person.class, 1);  
    67.         em.remove(person); //删除实体  
    68.         em.getTransaction().commit();  
    69.         em.close();  
    70.         factory.close();  
    71.     }  
    72.       
    73.     @Test public void find(){  
    74.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    75.         EntityManager em = factory.createEntityManager();  
    76.         Person person = em.find(Person.class, 2); //类似于hibernate的get方法,没找到数据时,返回null  
    77.         System.out.println(person.getName());  
    78.         em.close();  
    79.         factory.close();  
    80.     }  
    81.     @Test public void find2(){  
    82.         EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");  
    83.         EntityManager em = factory.createEntityManager();  
    84.         Person person = em.getReference(Person.class, 2); //类似于hibernate的load方法,延迟加载.没相应数据时会出现异常  
    85.         System.out.println(person.getName()); //真正调用时才查找数据  
    86.         em.close();  
    87.         factory.close();  
    88.     }  
    89. }  

    d)、运行junit测试代码里的相应方法就行可以。

  • 相关阅读:
    CodeForces 408E Curious Array(组合数学+差分)
    CodeForces 519E A and B and Lecture Rooms(倍增)
    洛谷 4051 [JSOI2007]字符加密(后缀数组)
    哇,两门学考都是A(〃'▽'〃)
    BZOJ 1977 严格次小生成树
    XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
    XJOI 3629 非严格次小生成树(pqq的礼物)
    XJOI 3363 树4/ Codeforces 739B Alyona and a tree(树上差分+路径倍增)
    [转载]别让用户发呆—设计中的防呆策略
    Linux下的链接文件
  • 原文地址:https://www.cnblogs.com/lonely-buffoon/p/5581982.html
Copyright © 2011-2022 走看看