2019-10-16Jpa的增刪改查

package com.shenyue.controller;

import com.shenyue.bean.Customer;
import com.shenyue.utils.JpaUtils;
import org.junit.jupiter.api.Test;

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

public class JpaTest {
/*
    測試jpa的保存
        案例:保存一個客戶到數(shù)據(jù)庫中
    jpa的操作步驟
        1.加載配置文件創(chuàng)建工廠(實體管理類工廠)對象
        2.通過實體管理類工廠獲取實體管理器
        3.獲取事務(wù)對象璃搜,開啟事務(wù)
        4.完成增刪改查操作
        5.提交事務(wù)(回滾事務(wù))
        6.釋放資源
* */
@Test
    public void  testSave(){
//        //1.加載配置文件創(chuàng)建工廠(實體管理器工廠)對象
//    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
////        2.通過實體類管理器工廠獲取實體管理器
//    EntityManager em = factory.createEntityManager();
    EntityManager em=  JpaUtils.getEntityManager();
//        3.獲取事務(wù)對象剂公,開啟事務(wù)
    EntityTransaction tx = em.getTransaction();
    tx.begin();//開啟事務(wù)
//        4.完成增刪改查操作:保存一個客戶到數(shù)據(jù)庫中
    Customer customer = new Customer();
    customer.setCustName("SS1111");
    customer.setCustIndustry("教育");
//    保存
    em.persist(customer);//保持操作

//        5.提交操作
    tx.commit();
//        6.釋放資源
    em.close();
//    factory.close();
    }
    /*
    * 根據(jù)ID查詢用戶
    * 使用find方法查詢:
    *   1.查詢的對象就是當(dāng)前客戶對象本身
    *   2.在調(diào)用find方法的時候展蒂,就會發(fā)送sql語句查詢數(shù)據(jù)庫
    * */
    @Test
    public void testFind(){
        //1.通過工具類獲取EntityManager
        EntityManager em = JpaUtils.getEntityManager();
//        2.開啟事務(wù)
        EntityTransaction tx = em.getTransaction();
        tx.begin();
//        3.增刪改查---根據(jù)用戶ID查詢用戶
        /*
        * find:根據(jù)ID查詢數(shù)據(jù)
        *       class:查詢數(shù)據(jù)的結(jié)果需要包裝的實體類類型的字節(jié)碼
        *       id:查詢的主鍵的取值
        * */
        Customer customer = em.find(Customer.class, 1l);
        System.out.println(customer);
//        4.提交用戶
        tx.commit();
//        5.釋放資源
        em.close();
    }

    /*
     * 根據(jù)ID查詢用戶
     *      getReference方法
     *          1.獲取的對象是動態(tài)代理對象
     *          2.調(diào)用getReference方法不會立即發(fā)送sql語句查詢數(shù)據(jù)庫
     *              *當(dāng)調(diào)用查詢結(jié)果對象的時候粉私,才會發(fā)送查詢的sql語句:什么時候用捎琐,什么時候發(fā)送sql語句查詢數(shù)據(jù)庫
     *延遲加載(懶加載)
     *        *得到的是一個動態(tài)代理對象
     *         *什么時候用,什么時候才會查詢
     * */
    @Test
    public void testReference(){
        //1.通過工具類獲取EntityManager
        EntityManager em = JpaUtils.getEntityManager();
//        2.開啟事務(wù)
        EntityTransaction tx = em.getTransaction();
        tx.begin();
//        3.增刪改查---根據(jù)用戶ID查詢用戶
        /*
         * find:根據(jù)ID查詢數(shù)據(jù)
         *       class:查詢數(shù)據(jù)的結(jié)果需要包裝的實體類類型的字節(jié)碼
         *       id:查詢的主鍵的取值
         * */
        Customer customer = em.getReference(Customer.class, 1l);
        System.out.println(customer);
//        4.提交用戶
        tx.commit();
//        5.釋放資源
        em.close();
    }
/*
* 刪除一個客戶的案例
* */
    @Test
    public void testRemove(){
        //1.通過工具類獲取EntityManager
        EntityManager em = JpaUtils.getEntityManager();
//        2.開啟事務(wù)
        EntityTransaction tx = em.getTransaction();
        tx.begin();
//        3.增刪改查---根據(jù)用戶ID查詢用戶
        /*
        * 根據(jù)id查詢用戶
        * 調(diào)用remove方法完成刪除操作
        * */
        Customer customer = em.find(Customer.class, 1l);
        em.remove(customer);
//        4.提交用戶
        tx.commit();
//        5.釋放資源
        em.close();
    }
/*
* 更新用戶的操作
*           merge(Object)
* */
    @Test
    public void testUpdata(){
        //1.通過工具類獲取EntityManager
        EntityManager em = JpaUtils.getEntityManager();
//        2.開啟事務(wù)
        EntityTransaction tx = em.getTransaction();
        tx.begin();
//        3.增刪改查---根據(jù)用戶ID查詢用戶
        /*
         * 根據(jù)id查詢用戶
         * 更新客戶
         * */
        Customer customer = em.find(Customer.class, 2l);
        customer.setCustIndustry("銀子");
        em.merge(customer);
//        4.提交用戶
        tx.commit();
//        5.釋放資源
        em.close();
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豪椿,一起剝皮案震驚了整個濱河市纺棺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌识藤,老刑警劉巖砚著,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眯牧,死亡現(xiàn)場離奇詭異,居然都是意外死亡赖草,警方通過查閱死者的電腦和手機(jī)学少,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秧骑,“玉大人版确,你說我怎么就攤上這事『跽郏” “怎么了绒疗?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骂澄。 經(jīng)常有香客問我吓蘑,道長,這世上最難降的妖魔是什么坟冲? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任磨镶,我火速辦了婚禮,結(jié)果婚禮上健提,老公的妹妹穿的比我還像新娘琳猫。我一直安慰自己,他們只是感情好私痹,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布脐嫂。 她就那樣靜靜地躺著,像睡著了一般紊遵。 火紅的嫁衣襯著肌膚如雪账千。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天暗膜,我揣著相機(jī)與錄音匀奏,去河邊找鬼。 笑死桦山,一個胖子當(dāng)著我的面吹牛攒射,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恒水,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼会放,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钉凌?” 一聲冷哼從身側(cè)響起咧最,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矢沿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滥搭,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年捣鲸,在試婚紗的時候發(fā)現(xiàn)自己被綠了瑟匆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栽惶,死狀恐怖愁溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情外厂,我是刑警寧澤冕象,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站汁蝶,受9級特大地震影響渐扮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掖棉,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一墓律、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啊片,春花似錦只锻、人聲如沸玖像。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捐寥。三九已至笤昨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握恳,已是汗流浹背瞒窒。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留乡洼,地道東北人崇裁。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像束昵,于是被迫代替她去往敵國和親拔稳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容