JPA之hibernate例子+總結


   1,About JPA

     JPA是sun公司定義的一套持久化API,他只是定義了相關的Interface,實現產品多種多樣如Hibernate,Ibatis,topLink,openJPA等等,JPA的偉大之處就是結束了多少年以來個大ORM產品各自為營的局面,使得各ORM產品統一,使用JPA,如過你的實現產品是HIbernate,以后換其他的ORM產品就變的很方便,使我們的代碼變的非常靈活。

  2.這里做一個簡單的事例,實現產品使用Hibernate,所使用的jar包如下所示:

  

 

 3. 在src下新建一個名為M“ETA-INF”的文件夾,在其下創建一個persistence.xml,他的內容為:

<?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="JPA" transaction-type="RESOURCE_LOCAL">
          <properties>
              <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
              <property name="hibernate.hbm2ddl.auto" value="update"/>
              <property name="hibernate.show_sql" value="true"/>
            <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
            <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/test"/>
            <property name = "hibernate.connection.username" value = "root"/>
            <property name = "hibernate.connection.password" value = "rootroot"/>
          </properties>
    </persistence-unit>
  
</persistence>

 4.實體bean

package com.youcent;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User implements Serializable{
    private Integer id;
    private String name;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }
    
}

5.建立test類進行測試

package com.youcent;

import java.util.List;

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

import org.junit.Test;

public class TestUser {
    //添加
    @Test
    public void testSave() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
        EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();
        User u = new User();
        u.setName("jerry");
        em.persist(u);
        em.getTransaction().commit();
        em.close();
        factory.close();
    }
    //刪除
    @Test
    public void testRemove() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
        EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();
        User u = em.find(User.class,2);
        em.remove(u);
        em.getTransaction().commit();
        em.close();
        factory.close();
    }
    //修改
    @Test
    public void update() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
        EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();
        //第一種方法
        //User u = em.find(User.class,1);
        //u.setName("tom");
        //第二種方法
        User u1 = new User();
        u1.setId(3);
        u1.setName("xyz");
        em.merge(u1);
        em.getTransaction().commit();
        em.close();
        factory.close();
    }
    //hql 取得所有對象
    @Test
    public void findAll() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
        EntityManager em = factory.createEntityManager();
        Query query = em.createQuery("select u from User u");
        List<User> list = query.getResultList();
        for(User u : list){
            System.out.println(u.toString());
        }
        em.close();
        factory.close();
    }
    //hql 取得單一結果 ,使用位"置參數查詢"
    @Test
    public void findById() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
        EntityManager em = factory.createEntityManager();
        Query query = em.createQuery("select u from User u where u.id=?1"); //表示明確指定從1開始設置參數
        query.setParameter(1, 4);
        User u  = (User) query.getSingleResult();    //取得單一結果
        System.out.println(u.toString());
        em.close();
        factory.close();
    }
    //hql 取得單一結果 ,同樣任何查詢可以使用"命名參數"查詢
        @Test
        public void findByHql() {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
            EntityManager em = factory.createEntityManager();
            Query query = em.createQuery("select u from User u where u.id=:id"); //表示明確指定從1開始設置參數
            query.setParameter("id", 4);
            User u  = (User) query.getSingleResult();    //取得單一結果
            System.out.println(u.toString());
            em.close();
            factory.close();
        }
    //hql分頁查詢
        @Test
        public void findByPage() {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
            EntityManager em = factory.createEntityManager();
            Query query = em.createQuery("select u from User u");
            query.setFirstResult(1);  //表示從第二條記錄開始
            query.setMaxResults(2);   //向后去兩條
            List<User> list = query.getResultList();
            for(User u : list){
                System.out.println(u.toString());
            }
            em.close();
            factory.close();
        }
        //hql更新查詢,須開事務
        @Test
        public void updateByhql() {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
            EntityManager em = factory.createEntityManager();
            em.getTransaction().begin();
            Query query = em.createQuery("update User u set u.name=:name where u.id=:id");
            query.setParameter("name", "tom1");
            query.setParameter("id", 1);
            int rows = query.executeUpdate(); //更新查詢要執行的方法
            if(rows>0){
                System.out.println("更新成功!");
            }
            em.getTransaction().commit();
            em.close();
            factory.close();
        }
        //hql刪除查詢,須開事務
        @Test
        public void removeByhql() {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("JPA");
            EntityManager em = factory.createEntityManager();
            em.getTransaction().begin();
            Query query = em.createQuery("delete from User u where u.id=:id");
            query.setParameter("id", 4);
            int rows = query.executeUpdate(); //更新查詢要執行的方法
            if(rows>0){
                System.out.println("刪除成功!");
            }
            em.getTransaction().commit();
            em.close();
            factory.close();
        }        
}

6.總結一下常用注解

1、日期:
  @Temporal(TeporalType.DATE)  -----> Date

2、枚舉:
  @Enumerated(EnumType.STAING) ---> Enum

3、大文本,二進制數據:
  @Lob ------> String,Byte[]
    
4、不和數據庫映射
  @Transient

5、延遲加載
  @Basc(fetch=FetchType.LAZY),只有當使用屬性的get方法

是才從數據中獲取!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM